如何在javascript / nodejs中试试try ... catch时防止双回调?

问题描述 投票:0回答:2

今天我在代码中发现了一个错误,导致回调可能被多次执行。 try ... catch的用途是用于JSON.parse()操作;但是,在回调本身内部发生错误。

var body='{}';
var callback=function (arg){
    console.log('callback executed with arg='+arg);
    arg?    pack_michael(): pack_jolly();
}
try {
    JSON.parse(body); //if JSON parse successful should callback once with true argument
    callback(true);
} catch (e){
    callback(false);  //if JSON parse fails should callback once with false argument
}

上面的代码导致双回调打印:

callback executed with arg=true
callback executed with arg=false

我可以想到一些丑陋的解决方案,比如创建一个变量并检查是否发生了错误,或者嵌套了另一个不必要的尝试... catch,但是没有任何简洁的解决方案可以解决这个问题吗?

javascript node.js callback try-catch
2个回答
4
投票

try / catch之后调用回调:

let parseOk = false;
try {
    JSON.parse(body);
    parseOk = true;
} catch (e){
    // parseOk is already false
}
callback(parseOk);

如果你还想在回调本身中捕获错误,你可以用不同的try / catch包围它,但这与JSON.parse中发生的错误是分开的,因此它们不应该被组合。


0
投票

在回调周围添加新的try/catch

try {
  JSON.parse(body);
  try {
    callback(true);
  } catch(err) { console.log("Error in callback")}
} catch (e){
  callback(false);  //if JSON parse fails should callback once with false argument
}
© www.soinside.com 2019 - 2024. All rights reserved.