![](/img/trans.png)
[英]Are there any issues with returning from a function before a promise has been resolved?
[英]Function returning before jQuery promise within promise is resolved
我有一個 function 調用dealCardSelectableAI()
,它設置了許多 jQuery 延遲承諾。 然后從其中調用 function setCardName()
。 一旦兩個函數都完成了它們的任務saveGame()
就應該被觸發。
一切正常,除了setCardName()
在saveGame()
被觸發之前沒有完成。 看來deferredQueue.push(setCardName(system, result));
沒有按我預期的那樣運行。 我不確定哪里出錯或如何解決問題。
var setCardName = function (system, card) {
var deferred = $.Deferred();
require(["cards/" + card[0].id], function (data) {
var cardName = loc(data.summarize());
system.star.ai().cardName = ko.observable(cardName);
deferred.resolve();
});
return deferred.promise();
};
var dealCardSelectableAI = function (win, turnState) {
var deferred = $.Deferred();
// Avoid running twice after winning a fight
if (!win || turnState === "end") {
var deferredQueue = [];
_.forEach(model.galaxy.systems(), function (system, starIndex) {
if (
model.canSelect(starIndex) &&
system.star.ai() &&
system.star.ai().treasurePlanet !== true
) {
deferredQueue.push(
chooseCards({
inventory: inventory,
count: 1,
star: system.star,
galaxy: game.galaxy(),
addSlot: false,
}).then(function (result) {
deferredQueue.push(setCardName(system, result));
system.star.cardList(result);
})
);
}
});
$.when(deferredQueue).then(function () {
deferred.resolve();
});
} else {
deferred.resolve();
}
return deferred.promise();
};
dealCardSelectableAI(false).then(saveGame(game, true));
您的代碼顯示調用 saveGame() 並且從 function 調用返回的內容應設置為 then。 這不是說,“完成后調用 saveGame”
dealCardSelectableAI(false).then(function () { saveGame(game, true) });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.