Promise的含义
就是一个对象,用来传递异步操作的消息。
基本用法
resolve,reject是javascript引擎提供的。
const promise = new Promise(function(resolve, reject) {const result = {success: truevalue: 777} //伪代码,比如接口返回的参数if(result.success) {resolve(result.value) // 供外部函数继续使用}else {// 失败就调用这里reject(error) // 供外部函数继续使用}})
特点:
1.对象的状态不受外界影响
有3种状态,Pending(进行中),Resolved(已完成,又称Fulfilled),Rejected(已失败)
2.一旦状态改变就不会再回来。
最终状态只能以下2种
Pending ->Resolved
Pending ->Rejected
如果Promise状态已经变成Resolved,再抛出错误是无效的。
const promise = new Promise(function(resolve, reject) {resolve('ok')throw new Error('test')})promise.then(function(value) {console.log(value)}).catch(function(error) {console.log(error)})// ok 说明:最后只接收到Ok
以上代码,用es6的箭头函数再写一次
const promise = new Promise((resolve, reject) => {resolve('ok')throw new Error('test')})promise.then((value) => {console.log(value)}).catch((error) => {console.log(error)})
注意:**这样写能捕捉到错误,**但是不是改变Promise的状态,此时Promise的函数体已经运行结束,所以这个错误实在Promise函数体体外抛出的
加了setTimeout就不一样了
const promise = new Promise(function(resolve, reject) {resolve('ok')setTimeout(() => {throw new Error('test')})})promise.then(function(value) {console.log(value)}).catch(function(error) {console.log(error)})// ok // Uncaught Error: test
说明:下一篇介绍then,catch, Promise.all