Javascript 两种奇怪的承诺行为
我发现自己对ES6承诺缺乏理解 我有两个问题 问题1) 正如您在上面看到的,当调用带有其值的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
\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,那么如何。然后知道承诺是否已被解析?@jwkooresolve()
调用告诉承诺已被解析。@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