我刚刚继承了一些代码,它包含了我以前从未见过的东西。在四处寻找之后,我还没有发现任何似乎足以解释我所看到的东西。
doAThingThatReturnsAPromise()
.then(currentState => {
...
return token.save({ key1: val1, key2: 'val2' });
})
.then(() => {
console.log(arguments);
});
token.save()
会返回没有值的已解决承诺(例如return Promise.resolve()
。
让我感到惊讶的是,在第二个.then()
中,arguments
有一个值,它是currentState
的值。我之前从未遇到过这种情况,并且没有找到任何文件表明如果通过空分辨率,这是预期的情况。
任何人都可以解释一下,或者指出一些设定这种期望的文档吗?由于我没有想到它,我想确保我记录它,或者,如果它是某种偶然的副作用,我会改变一些事情。
答案 0 :(得分:0)
这不是本机JS承诺的正常行为。
Promise.resolve('a')
.then(function() {
return Promise.resolve()
})
.then(function() {
console.log(arguments)
})

我的猜测是doAThingThatReturnsAPromise()
返回非标准的承诺。尝试将其包装在Promise.resolve
:
Promise.resolve(doAThingThatReturnsAPromise())
.then(currentState => {
...
return token.save({ key1: val1, key2: 'val2' });
})
.then(() => {
console.log(arguments);
});
此行为可能会消失。