簡體   English   中英

Meteor 更新 Mongo Sub Collection,未繼續

[英]Meteor update Mongo Sub Collection, not proceeding

我的對象中有一個包含其他對象的數組,我正在嘗試根據其中的值(術語)有選擇地更新其中一個對象。 但是,我失敗得很慘,每次我添加更新代碼時,該函數似乎只是在調用該函數,而不會繼續執行該函數的其余部分,我可以說在那之后沒有任何 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 都很陌生。

謝謝

加雷斯

與普通的 node.js 代碼不同,您不會在meteor 中向您的方法簽名顯式添加回調。 您的方法定義應如下所示:

searchTermsUpdateLatest: function(eventID, searchTerm, network, latest) {...}

同樣,您不會在函數末尾調用回調(刪除最后一行)。 如果該方法應該返回一個值,您可以在函數的末尾顯式地執行此操作。

有關更多詳細信息和示例,請參閱Meteor.call的文檔。

請注意,如果您從SyncedCron進行調用,那么它正在您的服務器上運行,您可能需要異步調用樣式(不要傳遞回調)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM