0
我以爲我有這個承諾的事情想通了,但是這個函數從一個查詢中獲取所有結果,無論1000個項目的限制是不能正常工作。任何人都可以向我解釋我哪裏錯了嗎?謝謝!解析雲代碼承諾沒有正確返回
這個雲工作是我main.js文件:
//in main.js
Parse.Cloud.job("testQuery", function(request, status) {
var theClass = Parse.Object.extend("SomeClass");
var theQuery = new Parse.Query(theClass);
console.log("Here we go...");
queryHelper.getAllResultsForQuery(theQuery, console).then(function(result) {
//This code is called before getAllResultsForQuery finishes
console.log("Finished the search!");
status.success("yay");
}, function(error) {
console.log("Fail " + error);
status.error("failed!");
});
});
而這個功能在queryHelper.js:
//in queryHelper.js
exports.getAllResultsForQuery = function(query, console) {
var resultArray = [];
var limit = 1000;
var sendQuery = function(skip) {
if (skip) {
query.greaterThan("createdAt", skip);
}
query.limit(limit);
query.ascending("createdAt");
query.find().then(function (newResults) {
receivedResults(newResults);
}, function (error) {
return Parse.Promise.error(new Error("query failed after " + resultArray.length + " results, error:" + error));
});
};
var receivedResults = function(received) {
resultArray = resultArray.concat(received);
console.log("Got " + received.length + " objects, now at " + resultArray.length);
if (received.length == limit) {
sendQuery(received[received.length-1].createdAt);
} else {
console.log("returning from getAllResults...");
return resultArray;
}
};
sendQuery();
};
當我運行的代碼中,queryHelper.getAllResultsForQuery功能似乎運行得很好,但Promise似乎在該功能完成之前觸發,因此控制檯輸出如下所示:
"Here we go…";
"Finished the search!";
"Got 1000 objects, now at 1000";
"Got 1000 objects, now at 2000";
"Got 1000 objects, now at 3000";
"Got 245 objects, now at 3245";
"returning from getAllResults…";
我在某處做菜鳥的錯誤嗎?
謝謝!我以爲我曾嘗試過,但我只是測試它。控制檯輸出現在按照正確的順序,但沒有找到結果。也許是另一個問題? – guthook
@guthook哪裏沒有結果返回?通常你沒有一個全局數組,但是在內部連接並且在最後返回。 –
@ neils-steenbeek查詢在receivedResults函數中返回0結果,所以控制檯讀取「獲得0個對象,現在爲0」。我嘗試切換它,所以它不使用全局數組,但仍然沒有運氣。我可能會檢查與我的Parse數據庫託管的人,看看它可能是一個服務器的錯誤。 – guthook