gpt4 book ai didi

javascript - 是否有更优雅、更直观的方式来打破 ES6 Promise 链?

转载 作者:行者123 更新时间:2023-11-30 11:53:51 25 4
gpt4 key购买 nike

<分区>

我遇到了一系列 ES6 thenables/promises 的情况。链中的第一个 promise 实际上是一个异步方法,它首先确定缓存是否可以刷新,链中的后续方法进行实际刷新。

问题是,如果第一种方法确定我不应该实际刷新缓存,我想从链中炸掉....我不需要做其余的事情。

我能够让它工作的唯一方法是存储测试方法的结果和链中每个后续 .then() 的结果,以测试是否实际做某事或返回一个简单的Promise.resolve(null).

这看起来像是一堆额外的愚蠢代码,实际上不需要在那里。

我下面的代码有效....错误处理是正确的....但是有没有更好的方法来编写这种模式,您只想有条件地继续链?一种不涉及存储答案然后在每个 then() 上强制执行 Promise.resolve() 的方法?

function asyncRefreshCache(wDb, forceRefresh) {
var cachedDataVersions;
var allowRefresh;
return wDb.asyncCacheRefreshAllowed(forceRefresh) // Here I test whether I am allowed to really refresh the cache.
.then(function (ar) {
allowRefresh = ar;
return allowRefresh
? wDb.asyncGetCacheDataVersionsForRefresh() // Only do this if allowed above.
: Promise.resolve(null); //Yuck. Would love to just break out. But how?
})
.then(function (dataVersions) {
cachedDataVersions = dataVersions;
return allowRefresh
? asyncServerFlexSearch({ dataVersions: dataVersions, includeInactiveFlag: true, onLoadFlag: true }) // Only do this if allowed above.
: Promise.resolve(null); //Yuck. Would love to just break out. But how?
})
.then(function (serverResponse) {
return allowRefresh
? wDb.asyncMergeCleanDataFromServerToCache(cachedDataVersions, serverResponse) // Only do this if allowed above.
: Promise.resolve(null); //Yuck. Would love to just break out. But how?
});
}

编辑:由于有关 Q Promises 和 JQuery Promises 的类似问题,此问题被标记为重复。 JQuery Promises 从来都不是真正的 promise 。所以我最初的希望是 ES6 Promises 的规范和实现能够满足这个看似重要的需求和用例。看来情况可能并非如此。所以那些其他问题的答案可能是这个问题的“正确”答案,但它们与 ES6 Promises 无关。所以这对我来说似乎不同。

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