我想知道以下是否是正常行为?
代码
INIT
Step 1.1 - in catch, err = false
Step 2 - in then, ok2 = undefined
Step 9 - in main catch, err = false
这是我在运行时收到的输出
{{1}}
阅读API我希望调用步骤1.1,然后执行步骤9,而不是步骤2.
这是一个错误还是我误读了API?
感谢您的提示!
答案 0 :(得分:0)
是的,这是预期的行为。以下是我看到的步骤:
resolve()
或reject()
被调用。.then()
处理程序的第二个处理程序(例如拒绝处理程序),然后看到“Step 1.1”输出。.then()
处理程序,并且您没有从该处理程序抛出或返回被拒绝的承诺,内部承诺的状态将切换为已解决。如果您“处理”被拒绝的承诺并且不抛弃或返回被拒绝的承诺,则状态将切换为已履行。.then()
处理程序是“步骤2”,因为承诺现在已经完成,而不是被拒绝。resolve("done")
,但外部承诺已被拒绝尝试resolve()
它现在什么都不做。它的状态已经设定,无法更改。.catch()
处理程序。.then()
已完成的处理程序,并转到最后一个.catch()
处理程序“第9步 - 主要捕获”。请记住,所有承诺都是异步解决或拒绝的。在外部promise上调用reject()
不会立即运行外部promise的.catch()
处理程序。它安排它在将来运行。