如果.when相当于 JQuery Promises 的“and”运算符,那么相当于“Or”运算符的是什么?
如果我有两个 Promise,并且我想在两个 Promise 都解决后做某事,那么我应该使用“when”方法。然而,我有一个场景,当一个 promise 或另一个 promise 得到解决时,我想做一些事情。
该场景是数据库初始化。第一个 promise 与检查数据库是否已存在有关。如果第一个 promise 被拒绝,第二个 promise 来自创建数据库。然后,我想运行一些代码,这些代码的条件是第一个 promise 已得到解决或第二个 promise 已得到解决。
目前我的代码看起来有点像这样:
function initialiseDB() {
var deferred = jQuery.Deferred();
// Check to see if the database exists already
var existencePromise = checkExistenceOfDatabase();
existencePromise.done(function() {
// The database exists; no need to pull a copy
deferred.resolve();
});
existencePromise.fail( function(error) {
// Failed to confirm existence of database; pull a copy
var pullPromise = pullDatabase();
pullPromise.fail( function(error) {
// Failed to pull database
deferred.reject();
});
pullPromise.done( function() {
// A copy of the database has been pulled
deferred.resolve();
});
});
return deferred.promise();
}
这实际上是一个自定义的“惰性或”运算符。
我对 JQuery 的 Promises 很陌生,我花了相当长的时间寻找通用的“Or”方法。上面的代码是应该如何完成的,还是有我错过的通用形式?
最佳答案
Matthew,你的代码将简化为:
function initialiseDB() {
var deferred = jQuery.Deferred();
checkExistenceOfDatabase().done(deferred.resolve).fail(function(error) {
pullDatabase().fail(deferred.reject).done(deferred.resolve);
});
return deferred.promise();
}
我非常确定它会进一步简化为:
function initialiseDB() {
return checkExistenceOfDatabase().then(null, function(error) {
return pullDatabase();
});
}
或者非常简洁:
function initialiseDB() {
return checkExistenceOfDatabase().then(null, pullDatabase);
}
虽然nett效果是类似or的,但它实际上是顺序逻辑......这正是您想要的;即仅当 checkExistenceOfDatabase()
失败时才应调用 pullDatabase
。
关于jquery - 如何在 JQuery 中 "or"两个 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16007168/