与Promises一起鬼混,下面是代码:
let prom1 = new Promise((res, rej) => {
res('res');
});
const resolvedProm1 = prom1.then((val) => {
return val
});
console.log(resolvedProm1);
let prom2 = new Promise((res, rej) => {
rej('rej');
});
const resolvedProm2 = prom2.catch((err) => {
return err
});
console.log(resolvedProm2);
chrome devtools显示有关诺言的以下信息:
但是,我没想到会有这种特殊的输出。我所期望的是:
<fullfilled>
,而不是<pending>
。为什么它们待处理但未满?答案 0 :(得分:2)
在两种情况下,在兑现承诺之前都会打印承诺。发送到promise上下文中的内容将始终在当前调用堆栈释放后执行,因此控制台将首先运行到函数结束。
答案 1 :(得分:1)
resolvedProm1
和resolvedProm2
都是Promises而不是。为什么它们待处理但未满?
因为它们是异步解决的。您正在记录它们,而它们仍未决。您会注意到,如果在console.log
和then
回调中添加了一些catch
语句,则这些回调也尚未执行。
在检查以下内容时,您只会得到 [[PromiseStatus]] 为“已解决” (实际上应为“已满”)。在devtools中承诺价值,您可以在它们解决后进行 。
resolvedProm2
被拒绝了,为什么promiseStatus显示它已解决?
否,您拒绝了prom2
。 resolvedProm2
是.catch()
调用的结果,其回调做了处理拒绝并返回了非错误结果。