以下代碼是收集有關費用和已完成任務到帳單數據庫的信息的事件。每次我運行這個過程時,我都會在帳單數據庫中收到2個條目。第一個條目總是空的,第二個條目是我想要的條目。流星在mongo數據庫中獲得雙重插入
'click .ConfirmCloseCase': function (event) {
var caseID = Session.get('CurrentClosingCaseID');
var TasksToChange = Tasks.find({caseID:caseID,done:true,billed:false});
var ExpensesToChange = Expenses.find({caseID:caseID,billed:false});
// Create new Entry into bills Database
Bills.insert({"expensestotal":0,"taskstotaltime":0}, function(error, result) {
// Set all Tasks to billed
TasksToChange.forEach(function(task){
Tasks.update(task._id, {$set: {"billed": true} })
Meteor.call('BillsUpsert', result, {$push: {"tasks": task._id}});
Meteor.call('BillsUpsert', result, {$inc: {"taskstotaltime": task.hours}});
})
// Set all Expenses to billed
ExpensesToChange.forEach(function(expense){
Expenses.update(expense._id, {$set: {"billed": true} })
Meteor.call('BillsUpsert', result, {$push: {"expenses": expense._id}});
Meteor.call('BillsUpsert', result, {$inc: {"expensestotal": expense.amount}});
})
Router.go('/Bills');
})
},
流星調用就像這樣:
Meteor.methods({
BillsUpsert: function(id, doc){
Bills.update(id, doc);
}
});
我想這是我得到2項到數據庫是因爲代碼是異步運行。這是一個正確的假設嗎?...作爲一個後續有「簡單」的修復? :)
謝謝你的努力@Michael Floyd。請看我的答案。因爲浪費你的時間,我真的很浪漫。我有我的插入和客戶端代碼更新,由於偉大的軟件包的集合:Collection2,simpleschema等。 – Gsuz