在一个Meteor方法中更新多个集合时,我有一个非常奇怪的错误(?)。
我设置了一个包含方法参数的对象,然后将其推送到三个不同集合中的数组。我第一次这样做,它可以工作,但之后对象是一个空对象。这似乎很奇怪!
该方法只被调用一次,无论我收集哪个顺序,都会发生同样的情况。
myMethod(_id, _cId, _uId, _log, _time) {
console.log('method called'); // only logs once
let _obj = {
id : _id,
log : _log,
time : _time,
user : _uId
};
console.log(_obj); // the object as expected
Site.CollectionOne.update(_id, {$push : {"logs" : _obj }});
console.log(_reaction, _id, _cId, _uId, _log, _time); // {} "theID" "theCID" "theUID" "the log message" 1234567890. The object has been emptied.
Site.CollectionTwo.update(_cId, {$push : {"logs" : _obj }});
Meteor.users.update(_uId, {$push : {"logs" : _obj }});
},
客户端和服务器上的日志相同。
答案 0 :(得分:1)
如果将对象而不是文字传递给JS函数,则它将通过引用而不是值传递。因此,如果update
对您传递的对象执行任何操作(如图所示),您还会在调用函数中看到这些更改,因为它实际上是更改的对象。< / p>
通过使用_.extend(或Object.assign),您可以创建要传递给函数的对象的副本,这样如果它发生变异并不重要。例如:
Site.CollectionOne.update(_id, {$push : {"logs" : _.extend({}, _obj) }});