如何确保TypeScript中的执行顺序

时间:2018-12-25 21:58:33

标签: javascript typescript promise es6-promise

当我最终遇到打字稿中的执行顺序问题时,我正在尝试实现一些功能:

代码:

a

输出:

new Promise((resolve) => {
          setTimeout(()=>{
            console.log("function11111");
            resolve();
          }
          ,3000);      
          
        })
        .then(_=>{
          setTimeout(()=>{
            console.log("function22222");
          }
          ,2000);   
        })
        .then(_=>{
          setTimeout(()=>{
            console.log("function3333333");
          }
          ,1000);   
        }) 

我的问题是:

1)对于function1111,如果我们将这个console.log('fucntion1111')替换为需要花费几秒钟的函数,在这种情况下,我的代码将在函数完成执行之前触发resolve(),那么如何确保等待我的功能

2)然后,在我的代码中,为什么执行不遵守我的命令?我以为是为此目的创造了诺言。

1 个答案:

答案 0 :(得分:4)

问题在于,一旦调用了初始then,就会同时调用所有resolve()处理程序。而且由于每个都有不同的超时,因此输出顺序为function33333 and then functon2222

要维持订单,您可以执行诺言链,该链将在调用下一个promise块之前等待上一个then()得到解决。

我已经兑现了诺言。如果需要进一步说明,请告诉我。

new Promise((resolve) => {
      setTimeout(()=>{
        console.log("function11111");
        resolve();
      }
      ,3000);

    })
    .then(_=> new Promise(resolve => {
      setTimeout(()=>{
        console.log("function22222");
        resolve();
      }
      ,2000);
      })
    )
    .then(_=> new Promise(resolve => {
      setTimeout(()=>{
        console.log("function3333333");
        resolve();
      }
      ,1000);
      })
    );