Promise

作者: _1633_ | 来源:发表于2020-05-26 09:46 被阅读0次

    Promise产生的目的

       Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。 

        回调函数解决异步的问题: 1 无法使用try ... catch 捕获错误; 2 不能 return;3 回调地狱。

    回调函数无法使用try...catch....    

        回调函数无法直接 return 结果,所以 我们无法直接获取 read() 执行后 返回得结果,再者就是回调地狱,多层的嵌套导致 代码的易读性可维护性 都很差。 

        事件解决异步:

    事件来解决异步

        使用事件解决异步相对回调来说 更加简单,但是对代码方面比较复杂,还需要使用 events 模块,使用起来相对复杂。


    异步解决方案的发展

        为了更好的解决异步问题,es6 推出了 Generator 函数的解决方案。

        Generator 函数有多种理解角度。语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态。

        执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数。返回的遍历器对象,可以依次遍历 Generator 函数内部的每一个状态。

    Generator

        遇到yield表达式,就暂停执行后面的操作,并将紧跟在yield后面的那个表达式的值,作为返回的对象的value属性值。

        Generator 函数将异步操作表示得很简洁,但是流程管理却不方便(即何时执行第一阶段、何时执行第二阶段)。


    promise 的 基本用法 和 相关 API

    promise

        Promise构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject。它们是两个函数,由 JavaScript 引擎提供,不用自己部署。

         注意: Promise 新建后就会立即执行。(new Promise 中的函数 会立即执行)

        resolve函数的作用是,将Promise对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;reject函数的作用是,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。

        Promise实例生成以后,可以用 then 方法分别指定 resolved 状态和 rejected 状态的回调函数。

    then

    手写自己的 promise 熟悉 api

    1 2 3 4 5 6

    相关文章

      网友评论

        本文标题:Promise

        本文链接:https://www.haomeiwen.com/subject/ftylgctx.html