Promise基本概念
Promise
意为承诺,表示将来一定会发生的事情,是一种异步编程解决方案,最早由社区提出和实现;
Promise
有三种状态:pending
(进行中)、fulfilled
(已成功)和rejected
(已失败);只能从pending
变为fulfilled
或者从pending
变为rejected
,且一旦状态发生改变,就不会再发生变化。
Promise基本用法
ES6 规定,Promise对象是一个构造函数,用来生成Promise实例。
const promise = new Promise(function(resolve, reject) {
// ... some code
if (/* 异步操作成功 */){
resolve(value);
} else {
reject(error);
}
});
promise
为构造函数Promise()
的实例,通过then
方法可以分别指定resolve
和rejected
的回调函数。
promise.then((v) => {
//success
}, (e) => {
//error
})
使用Promise对象实现ajax的栗子:
const getJSON = function(url){
const promise = new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest()
xhr.open('GET', url, true)
xhr.onreadystatechange = function(){
if(this.readyState !== 4){
return
}
if(this.status === 200){
resolve(this.response) //该参数传递给resolve的回调函数
}else{
reject(new Error(this.statusText)) //该参数传递给reject的回调函数
}
}
xhr.responseType = 'json'
xhr.send()
})
return promise;
}
getJSON('./a.json').then((json) => {
console.log(`json is ${json}`)
}).catch((e) => {
console.log(`error is ${e}`)
})
then
返回的是一个新的Promise对象,catch
用来捕获发生的错误
Promise.resolve()
将一个对象转换成Promise对象,例如:
const jsPromise = Promise.resolve($.ajax('/whatever.json'));
参考文献:
[1]:阮一峰老师的文章