簡體   English   中英

Node.js-被擊中時回調不會停止執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM