Node.js 使用嵌入式异步函数时,异步系列如何传递结果?

Node.js 使用嵌入式异步函数时,异步系列如何传递结果?,node.js,async.js,Node.js,Async.js,我知道您可以在异步串行辅助函数中使用next(err,result)将结果推送到最终结果数组,如下所示: fs = require('fs'); async = require('async'); function readTheFile(next) { var result1 = 'something'; next(null, result1); // <- next is executed } function processTheData(next) { v

我知道您可以在异步串行辅助函数中使用next(err,result)将结果推送到最终结果数组,如下所示:

fs = require('fs');
async = require('async');

function readTheFile(next) {
    var result1 = 'something';
    next(null, result1); // <- next is executed
}
function processTheData(next) {
    var result2 = 'something else';
    next(null, result2); 
}
function processFinalResult(err, resultArray) {
    console.log(resultArray); // [ 'something', 'something else' ]
}

async.series(
    [readTheFile,
     processTheData
    ], processFinalResult
);
fs=require('fs');
async=require('async');
函数readTheFile(下一个){
var result1=‘某物’;
next(null,result1);//fs.readFile()的回调采用2个参数(err和data),如下所示:

fs.readFile('/etc/passwd', function (err, data) {
   if (err) throw err;
   console.log(data);
});
因此,当您传入async.series()的回调函数“next”时,fs.readFile()将其调用为next(err,data),其中数据最终将位于async的结果数组中。但是,如果您想在传递到async的结果数组之前对数据做些什么,可以执行以下操作:

function readTheFile(next) {
    var result1 = 'something';
    fs.readFile('file.txt', 'utf8', function(err, data) {
        if (err) {
            // handle error
        }
        // do some thing with data argument, such as parsing
        // or triming (data = data.trim() for example), or
        // assign it to result1 (result1 = data), then call next()
        next(err, result1);   // this will pass your result1 to async's final array
    }); 
}

请参阅我修订的代码,了解如何将result1传递给async的最终ResultArray我看到您在这里使用闭包来组合两个辅助函数。再看看我的问题。我有两个独立运行(串联)的辅助函数。如果result1位于readTheFile()而不是fs.readFile()中的回调,我不知道它如何在不使用闭包的情况下进入下一个调用(err,result1)
function readTheFile(next) {
    var result1 = 'something';
    fs.readFile('file.txt', 'utf8', function(err, data) {
        if (err) {
            // handle error
        }
        // do some thing with data argument, such as parsing
        // or triming (data = data.trim() for example), or
        // assign it to result1 (result1 = data), then call next()
        next(err, result1);   // this will pass your result1 to async's final array
    }); 
}