本文已参与 「新人创作礼」活动, 一起开启掘金创作之路。
22- promise
- 解决回调地狱问题
- new 一个 pormise : let p1 = mew pormise( (resolve, reject) => {}) console.dir(p1)
- pormise 的三种状态 待定: pending(); 成功: resolve(); 失败: reject()
- 从 pending 待定状态转变为 resolve reject 状态都是不可逆转的, 当然状态发生了改变就会进入到 then 或是 catch 当中去对应的也就是成功和失败。
- then() 的返回值也是一个 Promise 对象, 但是这两个 Promise 完全是两个不相干的: let fnPromise = new Promise(() => {}) let logPromise = fnPromise.then(fn, fn) console.log(fnPromise === logPromise) // false
- 那么上述 logPromise 的状态和 PromiseValue 如何确定 ● 如果p1的状态是pending,则p2的状态也是pending。 如果p1的状态是resolved,then()会去执行f_ok,则p2的状态由f_ok的返回值决定。 ○ 如果f_ok返回值不是promise对象,则p2的状态是resolved,且p2的promiseValue就是f_ok函 数的return值。 ○ 如果f_ok返回值是一个promise对象,则p2的状态及promiseValue以这个promise对象为准。 ○ 如果f_ok这个函数内部发生了错误(或者是用户主动抛出错误),则p2的状态是rejected,且p2 的promiseValue就是这个错误对象。 如果p1的状态是rejected,then()会去执行f_err,则p2的状态由f_err的返回值决定。 ○ 如果f_err返回值不是promise对象,则p2的状态是resolved,且p2的promiseValue就是f_err 函数的return值。 ○ 如果f_err返回值是一个promise对象,则p2的状态及promiseValue以这个promise对象为准。 ○ 如果f_err这个函数内部发生了错误(或者是用户主动抛出错误),则p2的状态是rejected,且 p2的promiseValue就是这个错误对象。
- async await 语法: 是 Es7 新增的语法 Promise 的语法糖
- async 的函数返回是一个 Promise 对象; async 函数内部 return 返回的值是 Promise 对象的值。
- await 必须是与 async 一起使用的, await 就是返回该 Promise 的值, 如果不是 Promise 对象, 就会直接返回一个对应的值.
22- Es6 模块化
- 新添加了模块的导入导出
- 在 package.json 文件中添加一个 "type": "module" 的配置项
- 默认导出: export default {} // 这里虽然也可以写数组等, 但是推荐写对象, 因为对象可以装任意数据类型的数据; 按需导出: export 对象名
- 默认导入: import obj from './* * '; 按需导入: improt {, *, } from './ * ';也可以一起书写: import obj,{, *, } from './ * *'; 中间用逗号隔开; 可以使用 as 把其变量名改变例如 {obj as arr} 如此 obj 就变为 arr