在 jQuery promise 中的 promise 之前返回的函数已解决

Function returning before jQuery promise within promise is resolved

我有一个调用 dealCardSelectableAI() 的函数,它设置了一些 jQuery 延迟承诺。然后从其中调用函数 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() 并且从函数调用返回的内容应该设置为 then。这并不是说,“完成后调用 saveGame”

dealCardSelectableAI(false).then(function () { saveGame(game, true) });