gpt4 book ai didi

javascript - 只有当第一个没有返回好的结果时才执行其他 promise

转载 作者:搜寻专家 更新时间:2023-11-01 00:29:50 26 4
gpt4 key购买 nike

因此,我为此苦苦挣扎了几天,并且找到了解决方案,但我觉得这不是一个好的解决方案。我目前有以下内容。我不喜欢它,因为我在 promise 中嵌套了 promise 。我不知道这是否合适,但看起来不像。

我试图用这段代码完成的是首先检查缓存数据库中的值,如果它不存在,然后我将检查真实的数据库。

关于如何更优雅地执行此操作的任何提示/技巧/指针/评论?

var getData = function() {
var cancel = false
var cache = db.getFromCache(query)
.then((data) => {
// Check if data is up to date
if (uptodate) {
return Promise.resolve(data)
}
cancel = true
})

return cache
.then(() => {
if (cancel)
return db.getFromDatabase().then( //code)
}
}

ps:这段代码可能会运行也可能不会运行我只是为了这个问题而快速完成。我不能在这里通过真正的代码

最佳答案

当您在 .then() 处理程序中时,您可以执行以下任何操作:

  1. 返回一个值 - 该值成为父 promise 的解析值。因此,无需返回 Promise.resolve(value)。您可以只返回值

  2. 返回一个 promise - 当您返回一个 promise 时,它会链接到父级 promise ,并且父级 promise 将不会解析,直到这个新的 promise 得到解决并且这个返回的 promise 的已解决值将成为父 promise 的解析值。

  3. 抛出异常 - 如果 .then() 处理程序抛出异常,该异常会被 promise 基础设施自动捕获并转化为拒绝,因此 throw err 的工作方式类似于 return Promise.reject(err)

因此,当您在 .then() 处理程序中时,您可以检查缓存数据是否有效,如果有效,则返回它。否则,返回一个新的 promise 以获取数据。

var getData = function() {
return db.getFromCache(query).then((data) => {
// Check if data is up to date
if (uptodate) {
// return cached data, will be resolved value of promise
return data;
} else {
// get data from db, return promise that will be chained
return db.getFromDatabase();
}
})
}

getData().then(...)

您的代码比需要的复杂得多:

  1. 您不需要 Promise.resolve()。您可以只返回该值。
  2. 您根本不需要cancel 变量。您可以在第一个 .then() 处理程序中完成所有工作。
  3. 您不需要第二个 .then() 处理程序。

关于javascript - 只有当第一个没有返回好的结果时才执行其他 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40959042/

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