开发者问题收集

ES6-对 Promise 的处理顺序感到困惑

2015-09-17
56

我有此代码:

let p1 = new Promise(function (resolve, reject) {
    setTimeout(function () {
        resolve({dogs: ['Fido', 'Spot']});
    }, 2000);
});

p1.then(function (val) {
    console.log('first then');
    console.dir(val);
    return _.extend(val, {cats: ['Fluffy', 'Whiskers']});
}).then(function (val) {
    console.log('second then');
    console.dir(val);
});

意外的控制台输出显示:

在此处输入图像描述

我不明白 cats 在实际附加到对象之前如何可能成为值的一部分。不过,第二个 then 中打印的结果对我来说是有意义的。我遗漏了什么吗?

2个回答

您正在将 cats 属性添加到您已记录的同一对象中。

正如 i 图标所示,控制台仅在您实际展开对象时读取该对象的属性。

SLaks
2015-09-17

据我所知,ES6 Promises 的 console.log 中有一个错误。它会等待几秒钟才记录对象的值,这就是它包含猫的原因。如果我没记错的话,这个错误发生在 Firefox 中。我不知道它在其他浏览器上的表现如何。

inf3rno
2015-09-17