Promise的含义
就是一个对象,用来传递异步操作的消息。
基本用法
resolve,reject是javascript引擎提供的。
const promise = new Promise(function(resolve, reject) {
const result = {
success: true
value: 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