-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Promise 相关 #9
Comments
2. 假如有一个 Promise 在构造函数里面 throw 一个错误,然后后面先 catch 再执行 then, 那么 then 方法会被执行吗?为什么
这是有一次面试遇到的一个问题,感觉这么问,结果大概率是会执行的,但是并不知道为什么[cry] 从结果导向,既然执行了 then ,那就看执行完 catch 方法后,返回是什么就知道了
注意这里返回结果是一个 Promise ,并且其状态是 resolved !! 仅执行构造函数,返回结果如下
状态为 rejected 的 Promise MDN 的解释是这样子的
至此,该问题就很清晰了 参考: |
关于 Promise 的链式调用?下面的代码输出什么?
MDN 关于 Promise.resolve(value) 的描述
问题延伸 then 返回的是什么?如果返回一个异常会怎么样?以下代码
注意这里并不是 throw Error 而是 return Error
再来看下面代码
可以看出 then 方法中传入的 reject 方法没办法捕获到 resovlve 中抛出的异常,只能由后续的 catch 方法捕获到
此时第一个 then 中抛出的异常,被第二个 then 中的 reject 方法捕获到了 |
练习:用 Promise 实现红绿灯问题
采用递归 + setTimeout 方式调用 |
最后附上简单版本的 Promise/A+ 手写实现 |
哥哥 你看我这个还有的救吗?除了开头那6秒多等,我想clearinterval当第一次执行时不等待,貌似不行。呜呜呜。。。。。。 |
基础知识点就不过多描述了,主要还是通过问题去发掘一些知识点
1. 关于 Promise 状态的理解
以下代码输出什么
resolve 完之后的代码也会执行,但是 resove 之后,Promise 的状态已从 pending 改为 resolved,关于状态的转换,Promise 的 A+ 规范上面有相应描述
即状态一旦更改,即不可逆,也不可变
所以即使 reject 了也不会进入 catch 方法
题目拓展 >>
The text was updated successfully, but these errors were encountered: