node.js - 将示例代码与 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.js 中的一个关键规则是不可能同步异步代码。
您可以通过使callTest
自身异步轻松获得所需的结果,例如:
async function callTest1() {
for(i=0;i<4;i++){
await test1();
}
}
现在您的输出将根据需要显示,但当然调用callTest1()
将立即返回(并且输出将随后打印)。
推荐阅读
- ios - Pod 无法导入 UIKit
- php - 在php中捕获文件夹名称的顺序
- javascript - ES6 将一个数组的元素缩减为一个数组中其元素出现的频率
- javascript - 我的 javscript 计算有问题
- c++ - 在字符串中找到得分最高的单词,但我不断收到下标超出范围的错误
- mongodb - 无法连接到 MongoDB Atlas 集群
- pyomo - Pyomo - 警告:NEOS 暂时不可用
- c# - .Net Core 3.1 Worker Service 使用 Appsettings.json
- amazon-web-services - 在外部供应商的 AWS 账户中访问 Amazon Redshift 集群
- .net-core - OData Core Lib - 如何使用服务器端分页