理解promise

98 阅读3分钟

突然发现看文档学习的效率确实有点低,总是看完就忘记了😭。及时的输出可以巩固所学,输出的方式除了更多的实践外,就是整理自己的大脑,将所学的知识规整记录下来,落实在纸上。在此给自己的学习做一个记录和检验。

以为自己掌握的还不错,真正提笔去写的时候发现,总是有梗住的感觉,一点也不顺,有很多想写的,却又觉得写不出来。先迈出第一步再说,做一些小小的尝试,再慢慢调整。就从最近刚看的一些小概念入手,以下就从几个方面很浅显的说下自己对于promise的认识😄。

  • 什么是promise
  • 为什么需要promise
  • 如何使用promise
  • 参考文献

promise是什么?

根据英文词典中的解释: image.png

代表一种承诺,放在js中理解更像是一个对于未来时间的承诺。我并不知道你的请求或者操作的结果,但是我在此刻对你作出一个承诺。当未来该操作的结果为成功时执行某一个操作,当该操作的结果为失败的时候执行某一个操作。

为什么需要promise?

它的产生是为了解决回调地狱的问题。

什么是回调地狱: 在promise之前,异步调用就已经存在。实现异步的思路就是和我们大脑最线性的想法一致。执行一个不能立刻返回的函数,当下并不能知道这个函数的执行结果。所以需要为这个函数提前安排好调用成功和失败两个分支分别需要进行的操作。只有一层的时候当然不会有什么样的问题,但是一旦在异步函数中再嵌套几层。就需要写很多层的回调函数。代码看起来不够优美,而且容易出错,这就是回调地狱。

如何解决回调地狱:不需要在每次出现结果的位置立刻就绑定所需要做的操作,而是提供一个容器占位后面再去向容器中添加内容。其实就是对写法的一种优化,对于解决异步问题思想并没有什么不同。依然还是先去做操作,然后再根据操作的结果有针对的做后续的操作。同时还解决了错误处理总是需要重复绑定的问题,可以在一个分支中捕获所有的错误信息。

如何使用promise?

let p = new Promise(exec);
p.then(res => {
    //exec函数执行成功的回调
})
p.catch(rea => {
    //exec函数执行出错的时候的回调
})

第一次写文章,也不知道该写些啥。提起笔去写的时候才发现自己对于知识的掌握是多么的薄弱。就在此作为一个学习的记录吧。

下篇讲讲更加深入的原理~

使用promise告别回调函数