我是node.js
中的新手,据我所知,任何回调都是创建一个可以并行执行的新事件。
例如,我有下一个带回调的代码:
function testFunction(var1){
s3.heah(var1, function(data, err){
return err;
})
}
然后我调用这个函数:
function callToOtherFunc(var1){
var result = testFunction(var1);
if (result != null){
console.log("This is an error!");
}
}
正如我所见,result
总是null
,这是因为s3.head
需要一些时间才能返回,而callToOtherFunc
会继续执行。
我怎能避免它?
答案 0 :(得分:0)
如果您无法更改代码,则需要在s3.heah
方法的回调中执行回调,如下所示:
function testFunction(var1, callback){
s3.heah(var1, function(data, err){
callback(err);
});
}
function callToOtherFunc(var1){
testFunction(var1, function(err) {
if (result != null){
console.log("This is an error!");
}
}
}
答案 1 :(得分:0)
首先,您的testFunction
返回undefined,在这种情况下,结果将在任何时候都未定义(result == null
)。
修改以前的答案,您需要将result
值传递给回调。
function testFunction(var1, callback){
s3.heah(var1, function(data, err){
callback(err, data);
});
}
function callToOtherFunc(var1){
testFunction(var1, function(err, result) {
if (result != null){
console.log("This is an error!");
}
}
}
为了避免这种异步,请使用async
您需要更改函数的返回值以使用async:
function testFunction(var1, callback){
var1 += 1;
callback(null, var1);
}
function callToOtherFunc(err, result){
if (result != null){
console.log("This is an error!");
}
}
var workflow = async.compose(testFunction, s3.heah),
var1 = 10;
workflow(var1, callToOtherFunc);
如果你可以改变s3.heah的来源以使用回调function(err, data)
而不是function(data, err)
,如果不可能的话,它会很好用 - 不要在工作流程中包含s3.heah。< / p>