Parse Server上的以下Cloud代碼功能無法按預期工作。爲什麼此解析雲代碼中的承諾不起作用?
它似乎太早解決,以致並非所有鏈接的承諾promise2
都被執行。特別是我看到一些resultA.add(...);
沒有被執行。
我試圖重新安排這次幾次沒有成功。
我不知道return Parse.Promise.resolve();
是我應該在else
條款返回還是如果它是別的什麼也不是。
任何人都可以在這裏找到一些東西嗎?
Parse.Cloud.define("aFunction", function(request, response) {
var q = new Parse.Query("ClassA");
q.find()
.then(
function(resultsA) {
var promise = new Parse.Promise.as();
resultsA.forEach(function(resultA) {
promise = promise
.then(
function() {
var q = new Parse.Query("ClassB");
return q.first();
}
)
.then(
function(resultB) {
if (resultB != undefined) {
resultA.set(...);
return resultA.save();
} else {
resultA.set(...);
return resultA.save();
}
}
)
.then(
function() {
var q = new Parse.Query("ClassC");
return q.find()
.then(
function(resultsC) {
if (resultsC != undefined && resultsC.length > 0) {
var promise2 = new Parse.Promise.as();
resultsC.forEach(function(resultC) {
promise2 = promise2
.then(
function() {
resultA.add(...);
return resultA.save();
}
);
});
return promise2;
} else {
return Parse.Promise.resolve();
}
}
);
}
);
});
return promise;
}
)
.then(
function(result) {
response.success("success");
},
function(error) {
response.error(error.message);
}
);
});
長代碼,但我已經剝離下來,並希望顯示實際結構。謝謝。
是,'返回undefined'或'返回Promise.resolve(不確定)'(達到同樣的效果)似乎是適當的。 – Bergi
等待,對於Parse API,它是'返回Parse.Promise.as(undefined)',而不是'.resolve' – Bergi
@Bergi'.as'方法似乎用於預定義已解析承諾的返回值承諾宣告時間。要真正解決承諾,仍然需要調用'.resolve'。換句話說'Parse.Promise.as(aValue); Parse.Promie.resolve();'相當於'Parse.Promise.resolve(aValue);'。 – Manuel