Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 两种奇怪的承诺行为_Javascript_Ecmascript 6_Promise - Fatal编程技术网

Javascript 两种奇怪的承诺行为

Javascript 两种奇怪的承诺行为,javascript,ecmascript-6,promise,Javascript,Ecmascript 6,Promise,我发现自己对ES6承诺缺乏理解 我有两个问题 问题1) 正如您在上面看到的,当调用带有其值的\u o时,promise将解析,我们可以记录该值(感谢.then) 所以上面的例子看起来很清楚 但这里有一个我不能完全理解的例子 // weird var _o = null var test = () => { return new Promise(res => { _o = res }) } test(); var p = _o(100) co

我发现自己对ES6承诺缺乏理解

我有两个问题

问题1)

正如您在上面看到的,当调用带有其值的
\u o
时,promise将解析,我们可以记录该值(感谢.then)

所以上面的例子看起来很清楚

但这里有一个我不能完全理解的例子

// weird 

var _o = null

var test = () => {
    return new Promise(res => {
        _o = res
    })
}

test();

var p = _o(100)

console.log(p) // undefined
p
怎么可能是未定义的

据报道,

resolve()方法返回已解析的承诺对象 具有给定的值

我认为
p
必须被解决

问题2)

为什么
p(10)
会引发错误

我已经提到了这一点,但仍然未能完全理解

// weird 

var _o = null

var test = () => {
    return new Promise(res => {
        _o = res
    })
}

test();

var p = _o(100)

console.log(p) // undefined
提前感谢您的帮助

p怎么可能是未定义的

您似乎假设
Promise.resolve
(您引用的)与传递到
Promise
构造函数回调中的函数相同。它们不一样:

新承诺(解决=>{
console.log(Promise.resolve==resolve);

})
@Bergi:谢谢!“作为ECMAScript函数对象的内置函数必须是严格函数。”非常有用。谢谢你的帮助@贝吉,关于第一个问题,我还有进一步的问题。如果p返回undefined,那么如何。然后知道承诺是否已被解析?@jwkoo
resolve()
调用告诉承诺已被解析。@jwkoo它返回
undefined
,但计划
then()
调用的回调在承诺上注册。它设置了一个内部标志,是的。
Promise.resolve(10).then(r => console.log(r))  // 10


var p = Promise.resolve

p(10).then(r => console.log(r))

// Uncaught TypeError: PromiseResolve called on non-object