Node.js 使用嵌入式异步函数时,异步系列如何传递结果?
我知道您可以在异步串行辅助函数中使用next(err,result)将结果推送到最终结果数组,如下所示: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
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
});
}