2014-10-07 53 views
0

我想捕獲一個可能在異步函數中引發的錯誤。流星:如何捕獲異步回調函數錯誤

我已經用纖維包試過,但安裝這個包後,應用程序將無法啓動給這個錯誤:

=> Errors prevented startup:

While building the application:

node_modules/fibers/build.js:1:15: Unexpected token ILLEGAL

所以我放棄了這個包(這也意味着在Future class)...

我也試着用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塊碼將已運行。我只是想找出一種方法來捕捉我拋出的錯誤。

+0

這是在客戶端還是服務器上? – user3374348 2014-10-07 09:29:18

+0

@ user3374348這是在服務器上 – 2014-10-07 09:40:35

回答

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); 
} 
相關問題