函数内的promise链接如何工作? 在以下代码中:
promiseA() {
return anotherPromise().then( res => {
// resolution of promise A
})
};
promiseB() {
promiseA().then( res => {
// resolution of promise B
})
}
我测试了这段代码,我得到B的分辨率总是在A解析后完成。但是,我找不到任何文件。承诺B的解决是否会在承诺A解决后完成,或者我的测试只是一例竞争条件?
答案 0 :(得分:2)
是的,它总会在B之前解决A。如果你重新编写代码而没有单独方法的间接,你所拥有的只是:
anotherPromise().then(...A...).then(...B...)
这应该清楚地表明A then
中的代码必须始终在B then
内的代码之前运行。
一个简单的测试证实。你可以运行这一百万次,A总会在B:
之前解决
function anotherPromise(){
return new Promise((resolve,reject) => {
setTimeout(resolve,1000);
});
}
function promiseA(){
return anotherPromise().then( res => {
console.log("Resolve promiseA");
return res;
});
}
function promiseB(){
return promiseA().then(res => {
console.log("Resolve promiseB");
return res;
})
}
promiseB();
答案 1 :(得分:0)
你已经在Promise B中调用了Promise A,所以逻辑Promise A应该在Promise B之前解析。
Promise.then( // resolved first )
.then( // resolved second )