次のコードは、経費および完了したタスクに関する情報を請求書データベースに収集するイベントです。このプロセスを実行するたびに、請求書データベースに2つのエントリが追加されます。最初のエントリは常に空で、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