我无法让我的异步代码与 node.js 一起工作
同时尝试 async 和 step 库——代码只返回第一个函数(似乎没有通过其余函数)。我做错了什么?
谢谢!
var step = require('step');
step(
function f1(){
console.log('test1');
},
function f2(){
console.log('test2');
},
function finalize(err) {
if (err) { console.log(err);return;}
console.log('done with no problem');
}
);
或者这个:
var async = require('async');
async.series([
function f1(){
console.log('test1');
},
function f2(){
console.log('test2');
},
function finalize(err) {
if (err) { console.log(err);return;}
console.log('done with no problem');
}
]);
最佳答案
Step.js 期待每个步骤的回调。此外,使用 Step 的函数应该使用结果进行回调,而不是返回它。
假设您有:
function pullData(id, callback){
dataSource.retrieve(id, function(err, data){
if(err) callback(err);
else callback(data);
});
}
使用 Step 的效果如下:
var step = require('step');
function getDataFromTwoSources(callback){
var data1,
data2;
step(
function pullData1(){
console.log('test1');
pullData(1, this);
},
function pullData2(err, data){
if(err) throw err;
data1 = data;
console.log('test2');
pullData(2, this);
},
function finalize(err, data) {
if(err)
callback(err);
else {
data2 = data;
var finalList = [data1, data2];
console.log('done with no problem');
callback(null, finalList);
}
}
);
};
这将使它继续执行这些步骤。
请注意,出于两个原因,我个人更喜欢异步:
- Step 捕获所有抛出的错误并对其进行回调;这会改变应用程序的行为,而这些库应该只是清理代码的外观。
- Async 有更好的组合选项,看起来更干净
关于node.js - Node.js 中的异步或步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11533471/