【发布时间】:2021-11-03 05:24:28
【问题描述】:
代码是:
Promise.resolve().then(() => {
console.log(0);
return Promise.resolve(4);
}).then((res) => {
console.log(res)
})
Promise.resolve().then(() => {
console.log(1);
}).then(() => {
console.log(2);
}).then(() => {
console.log(3);
}).then(() => {
console.log(5);
}).then(() =>{
console.log(6);
})
结果是:0 1 2 3 4 5 6。
为什么log 4 在log 3 之后?在.then 方法中返回promise object 时发生了什么特别的事情?
【问题讨论】:
-
请记住,这样的问题实际上只对求知欲有用。如果有真正的异步操作,并且您关心两个单独的 Promise 链中的相对执行顺序,那么您必须编写代码以按照您想要的方式控制顺序 - 您不依赖任何您将获得的东西这个问题的答案,因为它与真正的异步操作无关。
-
"在.then方法中返回promise对象时有什么特别的事情发生?"从
then()方法的回调函数的回调函数中返回promise 将then方法返回的promise 解析为其回调函数返回的promise。见:MDN - then() Return Value -
虽然有这个问题的答案(与 Promises 的规范有关),但答案根本没有用。 不要依赖于该代码如何工作的知识。如果您很好奇,但随后完全忘记答案,那也没关系。取决于这样的事情是错误的来源。您需要编写异步代码以相互独立。如果它们是依赖的,则需要显式使其依赖(在 then(()=>console.log(3)) 中调用 resolve(4))
标签: javascript promise