我知道您可以在异步系列工作器函数中使用next(错误,结果)将结果推送到最终结果数组,如下所示:
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
);
但是,如果您具有以下工作程序函数,result1如何被推送到最终结果数组:
// file.txt contains 'file data'
fs = require('fs');
async = require('async');
function readTheFile(next) {
var result1 = 'something'; // <- how does this get to the final result array?
fs.readFile('file.txt', 'utf8', next); // <- next is only passed.
}
function processTheData(next) {
var result2 = 'something else';
next(null, result2);
}
function processFinalResult(err, resultArray) {
console.log(resultArray); // [ undefined ] length is 1
}
async.series(
[readTheFile,
processTheData
], processFinalResult
);
我无法调用next,因为它会立即执行它,而我只允许将函数作为回调函数传递给fs.readFile。 result1如何使它成为最终结果数组?
我不会从阅读文档或示例中找出它。
答案 0 :(得分:1)
fs.readFile()&#39; s回调需要2个参数(错误和数据)如下:
fs.readFile('/etc/passwd', function (err, data) {
if (err) throw err;
console.log(data);
});
因此当您传入async.series()&#39; next&#39;时,fs.readFile()将其称为下一个(错误,数据),其中数据最终将处于异步&# 39; s结果数组。但是,如果您希望在传递给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
});
}