我使用Async
库在NodeJS上进行异步编程。我想制作一个辅助方法(也使用异步方法),而不是将所有代码放在同一个地方。
以下是我的示例代码:
var solve = function() {
async.waterfall([
// a long working task. huh
function (callback) {
setTimeout(function() {
console.log('hello world!');
callback();
}, 2000);
},
function (callback) {
authorService.helperAsync();
},
function (callback) {
setTimeout(function() {
console.log('bye bye!');
}, 2000);
}
]);
};
solve();
在其他文件中,我创建了一个异步函数:
var helperAsync = function() {
async.waterfall([
function(callback) {
console.log('task 1');
callback();
},
function (callback) {
console.log('task 2');
callback();
}
]);
}
我希望结果应该是:
Hello World
Task 1
Task 2
Bye Bye
但输出只是
Hello World
Task 1
Task 2
。我该如何修复我的代码?
谢谢:)
答案 0 :(得分:2)
您需要将每个文件设置为module
,其中包含exporting
您想要返回的功能,如下所示:
<强> solve.js 强>
var async = require('async');
var helperAsync = require('./helperAsync.js');
module.exports = function solve() {
async.waterfall([
function helloOne(next) {
setTimeout(function() {
console.log('hello world!');
return next();
}, 2000);
},
function helperCall(next) {
helperAsync(params, function(){
return next();
});
},
function byeBye(next) {
setTimeout(function() {
console.log('bye bye!');
return next();
}, 2000);
}
], function(result){
return result;
});
};
<强> helperAsync.js 强>
var async = require('async');
module.exports = function helperAsync (params, callback) {
async.waterfall([
function(next) {
console.log('task 1');
return next();
},
function (next) {
console.log('task 2');
return next();
}
], function(result){
return callback(result);
});
};
我已将callback
中的async.waterfall
重命名为next
,以防止与模块的主要回调混淆。