-
Promise
代表一个异步操作。
- 创建一个
Promise
实例
const promise = new Promise((resolve,reject) => {
...
if (/*异步操作成功*/) {
resolve(value);
} else {
reject(error)
}
})
promise.then((value) => {
...
}).catch((error) => {
...
})
-
Promise
构造函数接收一个参数,该参数是一个异步执行的函数。这个函数有两个参数resolve
和reject
。
- 当异步操作执行成功时将会调用
resolve
,resolve
的作用是将promise
对象的状态由“未完成”变为“成功”,此时将会调用resolved
(成功)状态的回调函数,该回调函数是then
方法的第一个参数。该回调函数的参数值可通过设置resolve
函数的参数传递过来。
- 当异步操作执行失败时将会调用
reject
,reject
的作用是将promise对象的状态由“未完成”变为“失败”,此时将会调用rejected
(失败)状态的回调函数,该回调函数是then
方法的第二个参数。但一般不会使用then
的第二个参数,而是使用catch
方法。因为catch
方法不仅可以捕获到一开始promise
对象中异步操作失败的错误,还能捕获到前面then
方法中的错误。
- 使用
Promise
封装简化版axios
中get
方法:
const myAxios = {
get:function(url) {
return 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);
} else {
reject(new Error(this.statusText));
}
}
xhr.send();
})
}
}