gpt4 book ai didi

jquery - 如何在 JQuery 中 "or"两个 Promise

转载 作者:行者123 更新时间:2023-12-01 01:25:07 24 4
gpt4 key购买 nike

如果.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com