【发布时间】:2012-08-25 13:20:50
【问题描述】:
可能重复:
Is it possible to catch exceptions thrown in a JavaScript async callback?
我正在从数据库中提取订单然后请求,我希望能够打破forEach,我可以使用try 和catch 来做到这一点,但我认为回调不起作用
try{
orders.find().forEach(function(order){
request({
"method":"get",
"json":true
},function (error, response, data){
if (!error && response.statusCode == 200) {
console.log("Order id "+order.id);
}else{
throw "limit";
}
});
});
}catch(err){
if(err == "limit"){
console.log("error occured");
}
}
这就是我得到的
/Users/thomas/Desktop/forerunner/retrieveTransactions.js:120
throw "limit";
^
limit
我只想:
error occured
【问题讨论】:
-
@pimvdb 不一样,因为
forEach。 -
答案大致相同:不可能。这实际上是有道理的,因为 ajax 的完成晚于
forEach结束。 -
如果要停止迭代,只需在调用
orders.find()之前声明一个标志,并在遇到错误时设置它。任何后续处理程序都可以查询它并返回。如果接口支持,也可以使用some(),只要处理程序返回true就停止处理。