簡體   English   中英

Function 返回之前 jQuery promise 內 promise 解決

[英]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.

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