2017-09-19 33 views
0
inProgress = false; 

//async function which send value to device 
function send(_callback){ 
    try{ 
     // code that generate error 
     _callback(); 
    }catch(err){ 
     console.log("_callback doesn't start"); 
    } 
} 

function prepare_to_send(){ 
    try{ 
     inProgress= true; 
     send(function(){ 
      send(function(){ // isn't runned, because was err inside send 
      inProgress = false; 
      }) 
     }); 
    }catch(err){ 
     inProgress = false; 
    } 
} 

如在上面的代碼。 如果在發送函數時發生錯誤,prepare_to_send函數不會將全局變量InProgress更改爲false,而是使用_callback和prepare_to_send中的catch沒有運行。運行從外部嵌套捕獲嘗試

這是可能的,而不改變發送功能?

+0

不,你需要改變這種或那種方式發送功能。雖然你真的應該重新評估你的整個方法 – musefan

+0

你可能會從發送函數返回一個值,並相應地採取行動。 – teroi

+0

您可能希望send函數使用兩個回調函數,一個成功回調函數和一個錯誤回調函數。在可能拋出錯誤的代碼之後,調用catch塊中的錯誤回調以及try塊中的成功回調。 –

回答

0

如果_callback是不是可以異步函數重新拋出的錯誤,甚至是一個新問題:

inProgress = false; 
 

 
//async function which send value to device 
 
function send(_callback) { 
 
    try { 
 
    // code that generate error 
 
    _callback(); 
 
    } catch (err) { 
 
    console.log("_callback doesn't start"); 
 
    throw err; 
 
    } 
 
} 
 

 
function prepare_to_send() { 
 
    try { 
 
    inProgress = true; 
 
    send(function() { 
 
     throw 'error'; 
 
    }); 
 
    } catch (err) { 
 
    inProgress = false; 
 
    console.log(err); 
 
    } 
 
} 
 

 
prepare_to_send();

但你似乎如果_callback是同步的狀態,那麼你將不得不一直處理承諾,即即。適應整個代碼。您在評論區說還可以添加一個錯誤回調:

inProgress = false; 
 

 
//async function which send value to device 
 
function send(_callback, errorCallback) { 
 
    // code that generate error 
 
    _callback(errorCallback); 
 
} 
 

 
function prepare_to_send() { 
 
    inProgress = true; 
 
    send(function(errorCallback) { // Your callback have to call another function on error 
 
    try { 
 
     throw 'error'; 
 
    } catch (err) { 
 
     errorCallback(); 
 
    } 
 
    }, function() { 
 
    inProgress = false; 
 
    console.log('error occured'); 
 
    }); 
 
} 
 

 
prepare_to_send();