node.js async.series 是它应该如何工作? [英] node.js async.series is that how it is supposed to work?

查看:25
本文介绍了node.js async.series 是它应该如何工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

var async = require('async');

function callbackhandler(err, results) {
    console.log('It came back with this ' + results);
}   

function takes5Seconds(callback) {
    console.log('Starting 5 second task');
    setTimeout( function() { 
        console.log('Just finshed 5 seconds');
        callback(null, 'five');
    }, 5000);
}   

function takes2Seconds(callback) {
    console.log('Starting 2 second task');
    setTimeout( function() { 
        console.log('Just finshed 2 seconds');
        callback(null, 'two');
    }, 2000); 
}   

async.series([takes2Seconds(callbackhandler), 
              takes5Seconds(callbackhandler)], function(err, results){
    console.log('Result of the whole run is ' + results);
}) 

输出如下所示:

Starting 2 second task
Starting 5 second task
Just finshed 2 seconds
It came back with this two
Just finshed 5 seconds
It came back with this five

我期待takes2Second 函数在takes5Second 开始之前完全完成.这是它应该如何工作.请告诉我.最后一个函数永远不会运行.谢谢.

I was expecting the takes2Second function to finish completely before the takes5Second starts. Is that how it is supposed to work. Please let me know. And the final function never runs. Thanks.

推荐答案

不太清楚.您正在立即执行这些函数(一旦对数组求值),这就是它们似乎同时开始的原因.

Not quite. You are executing the functions immediately (as soon as the array is evaluated), which is why they appear to start at the same time.

传递给要执行的每个函数的回调是异步库内部的.一旦你的函数完成,你就执行它,传递一个错误和/或一个值.您无需自己定义该函数.

The callback passed to each of the functions to be executed is internal to the async library. You execute it once your function has completed, passing an error and/or a value. You don't need to define that function yourself.

最后一个函数永远不会在您的情况下运行,因为 async 需要您调用以继续执行系列中的下一个函数的回调函数实际上从未被执行(只有您的 callbackHandler 函数被执行).

The final function never runs in your case because the callback function that async needs you to invoke to move on to the next function in the series never actually gets executed (only your callbackHandler function gets executed).

试试这个:

async.series([
    takes2Seconds,
    takes5seconds
], function (err, results) {
    // Here, results is an array of the value from each function
    console.log(results); // outputs: ['two', 'five']
});

这篇关于node.js async.series 是它应该如何工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆