Meteor:如何捕获异步回调函数错误

时间:2014-10-07 09:25:52

标签: javascript asynchronous meteor asynccallback

我正在尝试捕获可能在异步函数中抛出的错误。

我尝试过使用光纤软件包,但在安装此软件包后,应用程序将不会开始提供此错误:

  

=>错误阻止了启动:

     

构建应用程序时:

     

node_modules / fibers / build.js:1:15:意外的令牌ILLEGAL

所以我放弃了这个包(这也意味着Future类)......

我还尝试用Meteor.wrapAsync包装回调函数,但这也不起作用。

这是我正在使用的代码:

try {
    Meteor.users.update({
        _id: this.user_id
    },{
        $set: {first_name: "test"}
    },{
        multi: false
    }, function(error, response){
        if(response < 1)
            throw "user could not be updated!";
    });

    console.log('user updated');
}
catch(error) {
    console.log('catched');
    console.error(error);
}

由于回调函数是异步的,因此不会捕获它,因为在抛出错误时catch块代码已经运行。我只想找到一种方法来捕捉我抛出的错误。

1 个答案:

答案 0 :(得分:1)

在服务器上,collection.update已经可以同步使用。所以你需要做的就是:

try {
  var documentsAffected = Meteor.users.update({
      _id: this.user_id
  },{
      $set: {first_name: "test"}
  },{
      multi: false
  });

  if (documentsAffected < 1) {
    throw new Error("user could not be updated!");
  }

  console.log("user updated");

} catch (error) {
  // will also catch exceptions thrown by Meteor.users.update
  console.log("caught an error!");
  console.error(error);
}