首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将示例代码与Promise、await和await同步

将示例代码与Promise、await和await同步
EN

Stack Overflow用户
提问于 2018-12-17 23:29:02
回答 1查看 29关注 0票数 0

我正在学习Node JS中的promises。我偶然发现了一个我想要同步它的代码(出于好奇)。

代码语言:javascript
复制
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();

我想要这样的输出:

代码语言:javascript
复制
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,然后它应该运行其他函数。我知道,在node js中,我们有异步的概念,但不知何故,我希望这段代码是同步的。

EN

回答 1

Stack Overflow用户

发布于 2018-12-17 23:40:11

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

您可以通过使callTest本身异步来轻松地获得您想要的结果,例如:

代码语言:javascript
复制
async function callTest1() {
  for(i=0;i<4;i++){
    await test1();
  }
}

现在,您的输出将显示为所需的输出,当然,对callTest1()的调用将立即返回(随后将打印输出)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53818271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档