0
這個流星服務器代碼在myArray.length === 3
時只需調用myFunc()
一次,但它不止一次被觸發。它如何被修復? thx流星觀測變化不止一次改變了火焰
let name = 'john';
myCol.find({name: name}).observeChanges({
changed: function (id, fields) {
if (fields.myArr) {
if (fields.myArr.length === 3) {
console.log('setting time out for: ' + name); // <--- prints more than once
let doc = myCol.find({name: name});
setTimeout(Meteor.bindEnvironment(function() {
ddpCall(doc);
}), 15000);
} else if (fields.myArr.length === 4) {
ddpCall(doc);
}
}
});
let dppCall = function (doc) {
if (doc.search === 'required') {
myCol.update({_id: doc._id}, {$unset: {search: ''}});
ddpConn.call('myFunc', doc);
}
}
// some where else in the ddp call code
'myFunc': function() {
// some logic here which changes the myArr
myCol.update({name: name}, {$set: myObj, $addToSet: {myArr: myLabel}}); // push myLabel
});
我已經改變了代碼,以反映使用超時是'原因:
您也可以通過「如果」的功能合併2簡化上面的代碼myArr.length'可能永遠不會大於3,但只要給它15秒以允許其長度由某些ddp邏輯改變即可。 –
不確定你是否仍然有這個問題。我看到的是,您觀察到myCol中名稱按名稱找到的更改,「myFunc」造成的更改。然後你調用一個函數ddpCall(doc),它改變了同一個集合上的記錄。是否有可能你有一個重疊的地方,這樣你可以改變同一文件兩次,一旦找到'name',然後找到_id:myCol.update({_ id:....})找到的同一個文件? –