丁鹿学堂:深入探究promise,看点不一样的东西

67 阅读2分钟
异步回调函数带来的问题

1.回调地狱问题

前面我们也多次提过了,就是如果多个异步回调嵌套,就会有回调地狱的问题,不利于阅读和维护。

2.可靠性丢失问题

如果我们在开发中引入了第三方库,他是异步的,则在同步和异步执行,会导致控制权不完全由我们掌握,带来可靠性丢失。

解决方案:promise

通俗感性上解释promise

promise翻译过来是承诺。我们现实中对应吃饭的一个叫号机制。

当你去吃饭的时候,你报了你点的饭,不会马上给你,但是给你一个号码。等做好了就会叫号,你拿着号码去领。

这个号码其实就是一个promise,他会承诺你在未来某个时候做好了会通知你。

也就是说,我们通过promise,你异步有结果(不管成功还是失败),不要让我给你传递回调,你给我一个通知就好了。

promise的执行流程解析

异步函数写在promise的参数函数中

如果成功了,就调用resolve,如果失败了就调用reject。

它的返回值是一个primise对象p。

我们通过p上面的then方法,传递两个回调,如果成功就执行第一个回调,如果失败就执行第二个回调。

这样的好处就是我们可以拿到代码的控制权。

注意:

promise并没有移除回调,而是改变了回调传入的为止。但是因为有标准的promise机制去保证,我们的代码健壮性更强。

promise的保证机制

1.对象的状态不受外界影响

2.一旦状态改变就不会再变

3 如果promise返回了成功的信息,那么绑定在成功上面的回调就会得到这个消息

4 如果发生了错误,promise会收到一个错误通知。

promise的缺点

1.无法取消,一旦新建他就会立即执行,无法中途取消

2.如果不设置回调,promise内部如果抛出错误,外界是无法得知的

3当promise处于pending状态时,无法得知目前是刚刚开始还是即将完成。

总结:

promise解决了回调地狱难维护的问题,也解决了控制转移的问题。如果没有promise,我们就必须要很谨慎去使用涉及到异步的第三方库的代码,必须要想办法解决状态跟踪的问题。

有了promise之后,他能使得我们重新获取代码的控制权。我们在遵循promise机制的代码中不需要担心可靠性问题。