-
Promise的概述:
promise 是 es6 提出的一个异步解决方案,比传统回调事件的写法更加合理更加强大,主要还是优雅
promise 有 pending(等待中),fulfilled(已成功),rejected(已失败),只有异步操作的结果才能够将状态改变,且只会有 pending->fulfilled 或者 pending->rejected,只要状态改变,会一直保持这个结果 resolve 将 Promise的状态设置为 fullfilled (已成功)
reject 将 Promise 的状态设置为 rejected (已失败) -
Promise的状态:
一个promise可能有三种状态:等待(pending)、已完成(fulfilled)、已拒绝(rejected)Promise 的状态一旦改变 不可更改 -
Promise对象的创建方式:
创建 promise 的三种方式
1.new Promise((resolve,reject) => {}) promise 的状态由回调函数来进行切换
2.Promise.resolve() 快速构建一个 fulfilled 状态的 promise
3.Promise.reject() 快速构建一个 rejected 状态的 promise -
Promise#then 方法的特点
then
1.处理 承诺 已完成的业务
2.更改 返回的 新的 promise 对象的状态
then 方法会返回一个 新的 promise 对象
a) then 方法的回调函数如果能被执行 新的 promise 对象 状态由回调函数 确定
I.如果回调函数产生异常 则返回 rejected 状态的 promise
II.如果回调函数 没有 return 则 返回 fulfilled 状态并将 undefined 作为参数传给新的 promise
III.如果回调函数 return 普通数据 则将 普通数据 作为 resolve 的 参数传给新的 promis
IV.如果回调函数 return 一个 promise 对象 则then 返回的新的 promise 对象状态和 return 的 promise 对象的状态完全一致
b) then 方法的回调函数如果不能执行 新的 promise 对象 和调用 then 方法的 promise 状态完全一致 -
Promise 链式调用
1.可进行链式调用,且每次 then 返回了新的 Promise(2次打印结果不一致,如果是同一个实例,打印结果应该一致。
2.只输出第一次 resolve 的内容,reject 的内容没有输出,即 Promise 是有状态且状态只可以由pending -> fulfilled或 pending-> rejected,是不可逆的。
3.then 中返回了新的 Promise,但是then中注册的回调仍然是属于上一个 Promise 的。
-
Promise.resolve 传入的参数类型
Promis.resolve(arg) 快速创建一个状态为 fulfilled 的 promise
arg 参数的数据类型满足以下条件
a) arg 是一个普通函数 会构建一个 fulfilled 状态的 promise 并将 arg 的值 作为 resolve的参数
b) arg 是undefined 会将undefined 作为 resolve的参数 并返回 fulfilled 状态的 promis
c) arg 是一个 thenable(某个对象中有 then 方法)对象 那么 会直接执行 then 方法 返回的 promis 对象状态由 then 函数来确定
d) arg 是一个 promis 对象 那么会返回一个 和 arg promise 对象状态完全一致 的 promise
相关文章
- 01-29解决forEach函数中异步调用及Promise.all()的基础使用
- 01-29如果value是一个普通值,则将普通值 Promise.resolve作为新Promise的resolve结果
- 01-2970.如何实现 Promise.finally ?
- 01-29饮冰三年-人工智能-Vue-70 Promise
- 01-29ES6必知必会 (五)—— Promise 对象
- 01-29Promise
- 01-29明明有了promise,为啥还需要async await?
- 01-29理解异步函数(async await;Promise)
- 01-29高阶Promise--async
- 01-29Promise.all 的原理