[英]Node.js - Callback don't halt the execution when got hit
我一直在使用node.js開發應用程序,在極少數情況下, 回調在獲得后不會停止執行,並且執行繼續
方法1
utilityMethod(arg1, arg2, arg2,function(err,result){
if(err){
callback(err);
}
if(result){
callback(null,result);
}
else{
callback('an error');
}
});
function utilityMethod(arg1, arg2, arg3, callback){
//some logic
if(err){
return callback(err);
}
else{
return callback(null,'success');
}
}
所以我正在使用下面的代碼(方法2)來停止執行
方法2
utilityMethod(arg1, arg2, arg2,function(err,result){
if(err){
return callback(err);
}
if(result){
return callback(null,result);
}
else{
return callback('an error');
}
});
我不確定為什么方法1失敗。 哪一種是正確的使用方式? 同樣為什么方法1失敗了?
**注意:我在async.each()中使用上述方法。 **
方法1的錯誤是if(err)
子句中沒有return語句,因此您的回調方法被調用了兩次。
如果您確實要停止執行程序,那么應該在這里執行的操作將引發異常
Model.find().exec(function(err,result) {
if(err) {
throw new Error(err);
}
// .. do what you want with the result ..
});
要退出功能,您需要使用return
。 從文檔中 :
當在函數中調用return語句時,該函數的執行將停止。 如果指定,給定值將返回給函數調用者。 如果省略表達式,則返回undefined。
所以Model2是正確的方法,盡管可以將其清除一點:
Model.find().exec(function(err, result) {
if (err) { return callback(err); } // will exit here if error
// no need to explicitly return here as it's the termination of the function
callback(null, result); // result could be null but callback can handle that
});
除非您在此函數中執行任何操作,否則只需使用以下命令即可將此邏輯推入callback
:
Model.find(callback);
function callback(err, result) {
if (err) {
// do something with err
}
// do soemthing with result
// ....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.