【发布时间】:2022-01-25 18:36:01
【问题描述】:
我正在使用:
await Promise.race([promise1, promise2]);
逻辑是如果promise1 在 5 秒内没有解决/拒绝,那么promise2 可能能够解决。所以在延迟promise2 尝试做它的事情之后,如果它失败了,我希望promise2 返回一个永远不会解决的Promise,这样就可以等待promise1。
我试过了
async function promise2(timeout=5000) {
await new Promise(resolve => setTimeout(resolve, timeout));
if (didStuffAndOK()) {
return "OK"
}
return new Promise( () => {} )
}
return new Promise( () => {} ) 似乎被解释为被拒绝而不是从未解决的承诺。
如何做出空头承诺(不是在现实生活中,在 JavaScript 中)?
【问题讨论】:
-
如果达到超时,让
promise1拒绝并用try/catch结束并在调用catch子句时回退到promise不是更容易吗? -
那么行为是不同的,因为如果 promise2 不起作用,我希望给 promise1 时间继续。 promise1 是一个 fetch,如果 promise 2 没有缓存命中则让它花费更长的时间
-
promise1 是一个 fetch,如果 promise 2 没有缓存命中则让它花费更长的时间 promise2 是否意味着 promise1 结果的“缓存”?在这种情况下,链接应该解决它:从promise2开始,如果失败则继续promise1。更好的是:通过将缓存移动到 promise1 本身来使缓存透明。
标签: javascript promise