首页 > 解决方案 > 将示例代码与 Promise、await 和 await 同步

问题描述

我正在学习 Node JS 中的 promise。我遇到了一个我想同步的代码(出于好奇)。

function test1(){
  return new Promise(async function(resolve,reject){
      await promise1();
      await promise2();
      await promise3();
      console.log('last');
      resolve(true);
  })

}

async function promise1(){
  return new Promise(async function(resolve,reject){
      console.log('promise1');
      await setTimeout(myFunc, 1500, resolve);
      console.log("111");
  });
}

function myFunc(resolve) {
  console.log(`arg was => resolve`);
  resolve(true);
}

function promise2(){
  return new Promise(function(resolve,reject){
      console.log('promise2');
      resolve(true);
  });
}

function promise3(){
  return new Promise(function(resolve,reject){
      console.log('promise3');
      resolve(true);
  });
}

function callTest1(){
  for(i=0;i<4;i++){
    test1();
  }
}

callTest1();

我想要这样的输出:

promise1
arg was => resolve
111
promise2
promise3
last
promise1
arg was => resolve
111
promise2
promise3
last
promise1
arg was => resolve
111
promise2
promise3
last
promise1
arg was => resolve
111
promise2
promise3
last

我希望我的代码等待 setTimeOut,然后它才应该运行其他功能。我知道,在节点 js 中,我们有异步的概念但不知何故我希望这段代码是同步的。

标签: node.jspromiseasync-await

解决方案


node.js 中的一个关键规则是不可能同步异步代码。

您可以通过使callTest 自身异步轻松获得所需的结果,例如:

async function callTest1() {
  for(i=0;i<4;i++){
    await test1();
  }
}

现在您的输出将根据需要显示,但当然调用callTest1()将立即返回(并且输出将随后打印)。


推荐阅读