原文说:
注意总是返回或终止 Promise 链。
const p1 = new Promise(function(resolve,reject){
resolve(1);
}).then(function(result) {
p2(result).then(newResult => p3(newResult));
}).then(() => p4());
创建新 Promise 但忘记返回它时,对应链条被打破,导致 p4 会与 p2 和 p3 同时进行。
疑惑:哪里忘记返回它了?文上代码看不懂,有点乱,请求帮忙解答一下,感谢!
这段 ES6 JavaScript 代码展示了一个关于 Promise 链的例子。在这个例子中,一个简单的错误导致了 Promise 链的中断,使得 p4 与 p2 和 p3 同时进行。让我们先理解这段代码。
首先,创建了一个名为 p1 的新 Promise,并立即将其解析为值 1。然后,在 p1 的 then 方法中,我们调用了一个名为 p2 的函数,该函数返回一个新的 Promise。然后,我们又在 p2 的 then 方法中调用了名为 p3 的函数,该函数同样返回一个新的 Promise。最后,我们调用了名为 p4 的函数。
问题在于,这个代码中的 then 方法并没有正确地返回新的 Promise。在 p1 的第一个 then 方法中,我们应该返回 p2(result).then(newResult => p3(newResult)),这样 p4 才会在 p2 和 p3 完成后执行。由于我们没有返回这个新的 Promise,p4 实际上与 p2 和 p3 同时进行,而不是等待它们完成。
为了修复这个问题,我们需要确保在 p1 的第一个 then 方法中返回新的 Promise。这是一个修改后的代码示例:
现在,由于我们在 p1 的第一个 then 方法中返回了新的 Promise,p4 将等待 p2 和 p3 完成后再执行,从而保持了 Promise 链的完整性。