我正在学习Node JS中的promises。我偶然发现了一个我想要同步它的代码(出于好奇)。
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,然后它应该运行其他函数。我知道,在node js中,我们有异步的概念,但不知何故,我希望这段代码是同步的。
发布于 2018-12-17 23:40:11
node.js中的一个关键规则是不可能同步异步代码。
您可以通过使callTest本身异步来轻松地获得您想要的结果,例如:
async function callTest1() {
for(i=0;i<4;i++){
await test1();
}
}现在,您的输出将显示为所需的输出,当然,对callTest1()的调用将立即返回(随后将打印输出)。
https://stackoverflow.com/questions/53818271
复制相似问题