【发布时间】:2015-06-17 05:21:35
【问题描述】:
我的对象中有一个数组,其中包含其他对象,我正在尝试根据其中的值(术语)有选择地更新其中一个对象。但是我失败得很惨,每次我添加更新代码时,该函数似乎只是在该调用中提交并且没有继续执行该函数的其余部分,我可以说在那之后没有任何console.log调用被调用.
这是我正在获取的对象的结构:
{ "_id" : "KH5SsND7f9urKSEyz",
"eventName" : "macmillan",
"twitterEnabled" : true,
"instagramEnabled" : false,
"vineEnabled" : false,
"fetchCount" : 2,
"enabled" : true,
"searchTerms" : [ { "term" : "badger", "latestTwitter" : 0, "latestInstagram" : 0, "latestVine" : 0 }, { "term" : "freedom", "latestTwitter" : 0, "latestInstagram" : 0, "latestVine" : 0 } ]
}
如果在函数中正确设置了 eventID,我可以通过调用来访问该对象并将其记录到控制台。
console.log(HTLEvents.find({_id: eventID}));
但是,当我调用它来更新方法时,该方法会停止,没有错误,只是没有继续。
HTLevents.update( {_id : eventID , "searchTerms.term" : searchTerm } ,
{$set : {"searchTerms.$.latestTwitter" : latest} } ,
false ,
true)
我已经三重检查了,所有使用的变量都不是未定义的并且具有正确的值。
这是完整的函数,这是使用来自 SyncedCron 重复事件的 Meteor.call 调用的
Meteor.call('searchTermsUpdateLatest', eventList[eventi]._id, returnValue[i][1].searchedTerm, returnValue[i][1].networkSearched, returnValue[i][1].latestID, function (error, eventList) {function . . . . }
当它被回调调用时,它正在异步运行。
HTLEvents = new Mongo.Collection('htlevents');
Meteor.methods({
fetchEnabledEvents: function() {
return HTLEvents.find({enabled: true}, {}).fetch();
},
searchTermsUpdateLatest: function(eventID, searchTerm, network, latest, callback) {
console.log('Updating:' + eventID);
console.log(eventID + " " + searchTerm + " " + network + " " + latest);
console.log(HTLEvents.find({_id: eventID}));
console.log(HTLEvents.find({_id: eventID , "searchTerms.term" : searchTerm}));
var err = undefined
if (eventID && searchTerm && network && latest) {
console.log("All parameters set, now updating the " + network + " for " + searchTerm);
if(network === "twitter"){
console.log("Updating twitter latest id for " + searchTerm);
HTLevents.update( {_id : eventID , "searchTerms.term" : searchTerm } ,
{$set : {"searchTerms.$.latestTwitter" : latest} } ,
false ,
true)
} else if (network == "instagram") {
console.log("Updating instagram latest id for " + searchTerm);
HTLevents.update({_id : { _str: eventID } , "searchTerms.term":searchTerm} , {$inc: {"searchTerms.$.latestInstagram": latest}});
} else if (network == "vine") {
console.log("Updating vine latest id for " + searchTerm);
HTLevents.update({_id : { _str: eventID } , "searchTerms.term":searchTerm} , {$inc: {"searchTerms.$.latestVine": latest}});
}
} else {
err = "Unable to update latestID, one or more values not set in method call."
console.log("Unable to update latestID, one or more values not set in method call.")
}
console.log('Updated:')
console.log(HTLevents.find({_id : eventID}));
callback();
},
});
我完全认为我在做一些愚蠢的事情,所以提前抱歉,但我对 Meteor 和 Javascript 都很陌生。
谢谢
加雷斯
【问题讨论】:
标签: javascript node.js mongodb meteor