请看看这个复制问题的小提琴。问题出现在场景#3中:
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,添加函数声明正在按预期工作......?
谢谢, 添
答案 0 :(得分:1)
。然后期望处理函数将返回一个有助于解决/异常的值来拒绝承诺 - 你在这里传递的是对.then的承诺,它只是被忽略了。返回结果以解决第一个承诺
参考 - chaining promises
function processMultistagePromiseBad(func1data, func2data) {
console.log("func1data:", func1data);
console.log("func2data:", func2data);
return work1(func1data)
.then((result) => {
return work2(func2data);
});
}
&#13;
编辑:
然后自己返回一个承诺。解析/拒绝函数的返回值将传递给新的promise。您链中的下一个使用此值作为输入。在processMultistagePromiseBad中,work1(func1data)返回一个解析值为&#34的promise;我是数据1&#34;。然后(work2(func2data))不返回带有返回值&#34的新承诺;我是数据2&#34;因为它没有重新修复任何东西。因此,processMultistagePromiseBad返回第一个承诺 - &#34;我是数据1&#34;因为它没有被下一次重新分配。在processMultistagePromiseGood中,它被重新分配。 Promise真的很混乱,但是当我们想要执行异步时,它会派上用场。希望这会有所帮助 - MSDN documentation on then