解决另一个功能的承诺

时间:2017-11-13 23:19:13

标签: angular typescript promise

函数内的promise链接如何工作? 在以下代码中:

     promiseA() {
            return anotherPromise().then( res => {
                   // resolution of promise A
             })
     };


      promiseB() {
             promiseA().then( res => {
                     // resolution of promise B
              })
      }

我测试了这段代码,我得到B的分辨率总是在A解析后完成。但是,我找不到任何文件。承诺B的解决是否会在承诺A解决后完成,或者我的测试只是一例竞争条件?

2 个答案:

答案 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 )