【发布时间】:2022-01-03 10:30:59
【问题描述】:
我正在使用 jQuery 的 ES5 环境中工作。我有一些代码如下:
var saveGame = function (gameState, saveStars) {
var deferred = $.Deferred();
var starsSaved = saveStars ? false : true;
model.game().saved(starsSaved);
model.driveAccessInProgress(true);
GW.manifest.saveGame(gameState).then(function () {
model.driveAccessInProgress(false);
deferred.resolve();
});
return deferred; // or deferred.promise()?
};
saveGame().then(/* more stuff */);
在这种情况下,无论我返回 deferred.promise() 还是仅返回 deferred,.then 都会按预期工作。鉴于此,我想我有点不清楚什么是承诺,并且想知道这两个回报之间有什么区别以及什么时候可能重要?
【问题讨论】:
-
不回答你的问题,但看起来
GW.manifest.saveGame(gameState)已经返回了一个 Promise(like?) 对象。如果您的代码使用deferred.resolve();可能会被视为反模式。 -
我是否理解正确,您的意思是在 GW.manifest.saveGame() 解决之前该功能不会完成,因此添加
$.Deferred()是没有意义的,因此很糟糕?由于函数必须为后来的.then()返回一些东西,我该怎么办? -
如果
GW.manifest.saveGame已经创建了一个 Promise,那么使用$.Deferred()构建一个新的 Promise 是一种反模式。$.Deferred()只能用于将不基于 Promise 的内容转换为基于 Promise 的版本。否则,您基本上会打破一个承诺链并创建一个新的承诺链。 ...
标签: javascript jquery jquery-deferred