.then()中的意外承诺值

时间:2017-04-06 12:55:21

标签: node.js promise

我刚刚继承了一些代码,它包含了我以前从未见过的东西。在四处寻找之后,我还没有发现任何似乎足以解释我所看到的东西。

doAThingThatReturnsAPromise()
  .then(currentState => {
    ...
    return token.save({ key1: val1, key2: 'val2' });
  })
  .then(() => {
      console.log(arguments);
  });

token.save()会返回没有值的已解决承诺(例如return Promise.resolve()

让我感到惊讶的是,在第二个.then()中,arguments有一个值,它是currentState的值。我之前从未遇到过这种情况,并且没有找到任何文件表明如果通过空分辨率,这是预期的情况。

任何人都可以解释一下,或者指出一些设定这种期望的文档吗?由于我没有想到它,我想确保我记录它,或者,如果它是某种偶然的副作用,我会改变一些事情。

1 个答案:

答案 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);
  });

此行为可能会消失。