承诺包装在 catch 子句中并等待 Promise.all
Promise wrapping in catch clause and waiting in Promise.all
- promise 的文档指出
.catch()
return 是一个 promise。这是否意味着如果您 return 代码中的一个承诺,它将包含在 .catch 的另一个承诺中?
即
const x = Promise.reject().catch(() => Promise.resolve("test"));
上述以“test”值解析的承诺是否会包含在 .catch 的另一个承诺中?据我了解,这就是异步函数中发生的事情;他们将结果包装在“引擎盖下”的承诺中。这可能会导致双重承诺,这是否也发生在这里?
- 如果将上述变量 x 中的承诺放入现有数组并传递给
Promise.all()
,那么什么构成已解决? catch 块和内部函数是否必须在 Promise.all 解析之前完成?如果是这样,为什么会这样?为什么 Promise.all 不会在第一个 Promise.reject() 执行后立即解析?它怎么知道要等待?
- 是和不是……涉及多个承诺,但它们是链接在一起的,没有相互包裹,或者在最终承诺中“承担”(实际短语是“采用”)的价值
Promise.resolve("test")
在你的情况下,所以,你得到的是一个单一的承诺,它解决(在这种情况下,解决)到值 "test"
- 5 个答案是:
- 是的,已解决,
- 是的,因为 x 是该表达式返回的最终承诺
- 因为 x 是该表达式返回的最终承诺,none 的其他承诺对 Promise.all、
是“可见的”
- 因为 x 是该表达式返回的最终承诺,所以其他承诺对 x 不“可见”
- 这就是 promise 链的工作方式,没有等待,只是 promise 链在工作
您可能会发现 The Promise Resolution Procedure - 2.3.2 有助于理解 Promises 的内部工作原理 - 2.3.2 专门处理在 .then
内部返回 Promise ...该解决过程的其余部分也很有启发性。
- promise 的文档指出
.catch()
return 是一个 promise。这是否意味着如果您 return 代码中的一个承诺,它将包含在 .catch 的另一个承诺中?
即
const x = Promise.reject().catch(() => Promise.resolve("test"));
上述以“test”值解析的承诺是否会包含在 .catch 的另一个承诺中?据我了解,这就是异步函数中发生的事情;他们将结果包装在“引擎盖下”的承诺中。这可能会导致双重承诺,这是否也发生在这里?
- 如果将上述变量 x 中的承诺放入现有数组并传递给
Promise.all()
,那么什么构成已解决? catch 块和内部函数是否必须在 Promise.all 解析之前完成?如果是这样,为什么会这样?为什么 Promise.all 不会在第一个 Promise.reject() 执行后立即解析?它怎么知道要等待?
- 是和不是……涉及多个承诺,但它们是链接在一起的,没有相互包裹,或者在最终承诺中“承担”(实际短语是“采用”)的价值
Promise.resolve("test")
在你的情况下,所以,你得到的是一个单一的承诺,它解决(在这种情况下,解决)到值"test"
- 5 个答案是:
- 是的,已解决,
- 是的,因为 x 是该表达式返回的最终承诺
- 因为 x 是该表达式返回的最终承诺,none 的其他承诺对 Promise.all、 是“可见的”
- 因为 x 是该表达式返回的最终承诺,所以其他承诺对 x 不“可见”
- 这就是 promise 链的工作方式,没有等待,只是 promise 链在工作
您可能会发现 The Promise Resolution Procedure - 2.3.2 有助于理解 Promises 的内部工作原理 - 2.3.2 专门处理在 .then
内部返回 Promise ...该解决过程的其余部分也很有启发性。