Promise
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
promisePromise构造函数接受一个函数作为参数,该函数的两个参数分别是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