jae*_*hin 6 javascript asynchronous waterfall node.js
我需要使用async.js模块执行异步函数.但是当我执行外部函数时,我遇到了一些问题.
代码传递得很好.
但是当我将全局变量更改为局部变量时,我无法使用参数进行设置.
var async = require('async');
var ogs = require('open-graph-scraper');
// global variables
var param1 = {url: 'http://www.google.com/'};
var param2 = {url: 'https://www.yahoo.com/'};
function function1(callback){
ogs(param1, function(error, data1) {
callback(null, data1);
});
}
function function2(data1, callback){
ogs(param2, function(error, data2) {
callback(null, data1, data2);
});
}
function function3(data1, data2, callback){
console.log(data1);
console.log("---------------");
console.log(data2);
}
(function temp() {
async.waterfall([function1, function2, function3],
function(err, result){
console.log(result);
console.log(err);
if(err) console.log(err);
}
);
})();
Run Code Online (Sandbox Code Playgroud)
如果param1和param2改为局部变量,就像这样..
(function temp() {
var param1 = {url: 'http://www.google.com/'};
var param2 = {url: 'https://www.yahoo.com/'};
async.waterfall([function1, function2, function3],
function(err, result){
console.log(result);
console.log(err);
if(err) console.log(err);
}
);
})();
Run Code Online (Sandbox Code Playgroud)
如何在function1()或function2()中使用"param"
我无法改变本地的功能类型
async.waterfall([
function(callback){
},
function(data,callback){
}],
function(err){
if(err) console.log(err);
}
);
Run Code Online (Sandbox Code Playgroud)
所以我通常做的就是设置一种“引导”函数作为我的瀑布中的第一个函数,它接收参数并启动将它们向前传递的链。
function start(params){
params = params || {}; // make sure you have at least an empty object here
return function(callback){
// do something
callback(null, params); // error is always the first cb param for most things
}
}
function second(params, callback){
// do something else. Maybe extend the params object
params.newProp = "foo";
callback(null, params);
}
// later, maybe in another module
async.waterfall([
start({foo : 'bar'}),
second
],
function result(e, res){
// handle result
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2763 次 |
| 最近记录: |