Node.js异步等待setTimeout中的控制流分解调用函数

时间:2018-05-04 03:45:40

标签: javascript node.js asynchronous control-flow

我有两个异步流程样本。

第一个是正常的。

 function delayPromise(item){
     return new Promise(resolve=>setTimeout(resolve, 1000));
 }
 async function delay(item){
     await delayPromise(item);
     console.log(item);
 }
 async function test(){
     var arr = [1,2, 3,4, 5, 6];
     for(elem of arr){
         console.log('starting ' + elem);
         await delay(elem);
     }
     console.log('done');
 }

 test();

上面的代码给出了我期望的结果如下。

starting 1
1
starting 2
2
starting 3
3
starting 4
4
starting 5
5
starting 6
6
done

第二个是更改delayPromise功能。我在setTimeout回调中编写了匿名函数,如下所示。

function delayPromise(item){
    return new Promise(resolve=>setTimeout(()=>resolve, 1000));
}

,结果如下。

starting 1

这些代码有什么不同?为什么我不能在第二个代码中得到预期的结果?

1 个答案:

答案 0 :(得分:1)

你需要执行解决方案:

function delayPromise(item){
    return new Promise(resolve=>setTimeout(()=>resolve(), 1000));
}

特别注意:解决()