JS范围Q承诺问题

时间:2017-02-20 11:29:39

标签: javascript scope promise

请看看这个复制问题的小提琴。问题出现在场景#3中:

JS Fiddle

function processMultistagePromiseBad(func1data, func2data) {
  console.log("func1data:", func1data);
  console.log("func2data:", func2data);
  return work1(func1data)
    .then(work2(func2data));
}

// scenario 3
processMultistagePromiseBad(data1, data2)
.then((results) => {
  console.log(results);
  return results;
})
.then((results) => scenario3.innerHTML += results + " <br />");

对于场景3和&amp; 4,我将2个数据对象传递给js函数,即调用work1&amp; work2在promise链中起作用。 Work2正在两个场景中运行,但场景3没有正确返回....为什么?

场景4,添加函数声明正在按预期工作......?

谢谢, 添

1 个答案:

答案 0 :(得分:1)

。然后期望处理函数将返回一个有助于解决/异常的值来拒绝承诺 - 你在这里传递的是对.then的承诺,它只是被忽略了。返回结果以解决第一个承诺

参考 - chaining promises

&#13;
&#13;
function processMultistagePromiseBad(func1data, func2data) {
  console.log("func1data:", func1data);
  console.log("func2data:", func2data);
  return work1(func1data)
    .then((result) => {
      return work2(func2data);
    });
}
&#13;
&#13;
&#13;

编辑:

然后自己返回一个承诺。解析/拒绝函数的返回值将传递给新的promise。您链中的下一个使用此值作为输入。在processMultistagePromiseBad中,work1(func1data)返回一个解析值为&#34的promise;我是数据1&#34;。然后(work2(func2data))不返回带有返回值&#34的新承诺;我是数据2&#34;因为它没有重新修复任何东西。因此,processMultistagePromiseBad返回第一个承诺 - &#34;我是数据1&#34;因为它没有被下一次重新分配。在processMultistagePromiseGood中,它被重新分配。 Promise真的很混乱,但是当我们想要执行异步时,它会派上用场。希望这会有所帮助 - MSDN documentation on then