2014-07-22 29 views
0

我正試圖按照Parse的文檔/示例在後臺作業中運行查詢。我想要做的是通過數據庫中的所有User進行查詢,並對與每個User關聯的matchCenterItem運行查詢。解析後臺作業不正確查詢所有用戶

當我運行此作業時,它記錄status.success,但它不會超過console.log('about to start the matchCenterItem query');

query.find().then(function(results)從來沒有運行,給我的印象是,我要麼錯誤地構造matchCenterItem查詢,要麼通過正確的方式來查詢每個User。爲了保持簡潔,我只發佈了相關的代碼片段,但如果需要,我會很樂意發佈後臺作業的整個代碼。

Parse.Cloud.job("MatchCenterBackground", function(request, status) { 

    //Parse.Cloud.useMasterKey(); 

    console.log('background task started'); 
    //defines which parse class to iterate through 


    //Query through all users 
    var usersQuery = new Parse.Query(Parse.User); 

    //For every user, do the following: 
    usersQuery.each(function(user) { 
     //query through all their matchCenterItems 
     var matchCenterItem = Parse.Object.extend("matchCenterItem"); 
     var query = new Parse.Query(matchCenterItem); 

     // promise and searchterm arrays to be filled 
     var promises = []; 
     var searchTerms = []; 

     //setting the limit of items at 10 for now 
     query.limit(10); 

     console.log('about to start the matchCenterItem query'); 

     query.find().then(function(results) { 

     console.log('matchCenterItem query results:' + results); 
     if (results.length > 0){ 

     //code cut off here 
+0

你是否從'function(user){}'返回任何東西?由於這是做異步工作,它需要返回一個承諾,以便'each()'知道每件作業何時完成。 –

+0

@ChrisSainty這是一個很好的觀點。我會如何正確地做這件事? – Ghobs

+0

@ChrisSainty如果你需要更多的上下文,這裏是完整的代碼:http://codeshare.io/bN03v – Ghobs

回答

2

好吧,這是很多代碼和深層嵌套。

從我所看到的,你需要返回當前在返回

27: return query.find().then(function(results) { 
104: return Parse.Promise.when(promises).then(function(results) { 

另外你對底部的兩個承諾應該要麼用then()鏈接在一起,或做了兩個承諾與Parse.Promise.when平行。無論哪種情況,結果都需要返回。

232: newMComparisonArray.save({ 
244: mComparisonQuery.find({ 

因此,代碼的問題只與創建但未等待的承諾有關。每當你創造一個承諾時,你都應該考慮誰在監聽完成的承諾,並確保承諾返回給聽衆。

+0

啊我明白了。 「與...平行」是什麼意思? – Ghobs

+2

'Parse.Promise.when'在你有很多承諾時使用,你希望它們都在同一時間開始發生,而不是等待對方。所以當你有兩個更多的任務可以運行時,他們不需要一個接一個地發生,你可以使用'Parse.Promise.when'來實現。 –

+0

有道理。在這種情況下,在'mComparisonQuery.find'內是否會出現'newMComparisonArray.save',而不是像之前提到的那樣? – Ghobs