promise的文档说明
.catch()
返回promise。这是否意味着,如果您在代码中返回一个promise,它将被另一个来自.catch的promise包裹
即
const x = Promise.reject().catch(() => Promise.resolve("test"));
将以";测试";被另一个来自catch的承诺所包裹?据我所知,这就是异步函数中发生的情况;他们把结果包装在承诺的一边&";在引擎盖下";。这可能会导致双重承诺,这也发生在这里吗?
- 如果上面变量x中的promise被放入现有数组并传递给
Promise.all()
,那么什么将被解析?catch块和内部函数必须在Promise.all解析之前完成吗?如果是,为什么会出现这种情况?为什么Promise.all不会在执行第一个Promise.rejectt((时立即解决?它怎么会知道等待
- 是和否。。。涉及多个承诺,但它们是连锁的,不是相互包裹的,也不是最终的承诺"采用";(实际短语是"采用"(在您的情况下是
Promise.resolve("test")
的值,因此,您得到的是一个单独的承诺,它将(在本例中,解析(为值"test"
- 5个答案是:
- 是的,它被解决了
- 是的,因为x是该表达式返回的最后一个promise
- 因为x是该表达式返回的最后一个promise,所以其他promise都不是"x";可见";致承诺
- 因为x是该表达式返回的最终promise,所以其他promise不是"x";可见";到x
- 这就是承诺链的工作方式,没有等待,只是承诺链在工作
您可能会发现承诺解决程序-2.3.2有助于理解承诺的内部工作原理-2.3.2专门处理在.then
中返回承诺。。。决议程序的其余部分也很有启发性。