2015-05-13 46 views
3

在方法拋出我有一個方法,它拋出一個錯誤,所以我可以在我的事件抓住它,並把它顯示給用戶,這樣的流星錯誤:無法趕上從事件

Meteor.methods({ 
    addPlayer: function(nickname) { 
     if (nickname == "") { 
     throw new Meteor.Error('empty-nickname', 'You must choose a nickname'); 
     } else { 
     Player.insert({ 
      nickname: nickname, 
     }); 
     } 
    }, 
    }) 

和我的事件

'submit form': function (e) { 
    e.preventDefault(); 

    var nickname = $('input').val(); 

    Meteor.call('addPlayer', nickname, function(error, result) { 
    if (error) { 
     console.log(typeof error); 
     console.log(error); 
    } 
    }); 
} 

然而,流星還是拋出一個異常,而模擬援引「addPlayer」的效果,並且錯誤變量是不是一個錯誤的對象,但具有相同的消息控制檯日誌一個字符串,所以我在我的控制檯中獲取兩個錯誤而不是錯誤對象。

包裝方法在try/catch中調用不起作用。

我在這裏錯過了什麼?

- 編輯 下面是結果的打印屏幕: Console print screen

圖片鏈接全分辨率:http://i.stack.imgur.com/zABar.png

+0

該代碼似乎對我來說是正確的。 「模擬調用'addPlayer'的效果是什麼意思」?你是否以某種方式與代碼中顯示的內容進行了區分? –

+0

你在哪裏定義方法?在服務器和客戶端(存根)還是僅在服務器上? (「如果存根引發異常,它將被記錄到控制檯。」) –

+0

拋出新的Meteor.Error(..)看起來不正確。它應該包含一個錯誤號。 –

回答

1

只在服務器上扔了錯誤。將其包裹在裏面if(!this.isSimulation) {}

Meteor.methods({ 
    addPlayer: function(nickname) { 
    if (nickname == "") { 
     if(!this.isSimulation) { 
     throw new Meteor.Error('empty-nickname', 'You must choose a nickname'); 
     } 
    } else { 
     Player.insert({ 
     nickname: nickname, 
     }); 
    } 
    }, 
})