Promise基本使用
Promise是JavaScript执行异步操作的执行方案
Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。
promise的一般执行步骤如下:
-
promise构造函数接收两个回调函数,分别为resolve和reject,表示请求成功和请求失败
注意:一定要在promise构造函数中执行上述两个回调函数,否则then方法将不会执行
-
在promise中定义异步执行任务,然后分别定义请求成功时与失败时所执行的方法
-
使用then执行请求成功时的任务,使用catch执行请求失败时的任务
例如:
const tNum = 2;
new Promise((resolve, reject) => {
setTimeout(() => {
console.log('hello world');
if (tNum == 2) {
resolve('hi you');
} else {
reject('error');
}
}, 1000);
}).then((message) => {
console.log(message);
}).catch((message) => {
console.log(message);
});
resolve和reject都可以传递参数,在then和catch中定义的函数默认参数就来自resolve和reject
promise补充
一个 Promise必然处于以下几种状态之一:
- 待定(pending): 初始状态,既没有被兑现,也没有被拒绝。
- 已兑现(fulfilled): 意味着操作成功完成。
- 已拒绝(rejected): 意味着操作失败。
实质上, then和catch的返回值又是一个新的promise,因此可以链式使用
但在链式使用promise时,如果其中一个then回调的函数无法执行进入reject时,那么接下来的then不会再执行,这也说明了其链式的原则。如果有catch,则直接跳到最后的catch,否则停止执行
例如:
const tNum = 2;
new Promise((resolve, reject) => {
setTimeout(() => {
console.log('hello world');
if (tNum == 2) {
resolve('hi you');
} else {
reject('error');
}
}, 1000);
}).then(() => {
console.log('message');
}).then(() => {
console.log('message2');
return new Promise((resolve, reject) => {
reject('most error!');
})
}).then(() => {
console.log('message3');
}).catch((message) => {
console.log(message);
})
实际上,将每个then和catch看作一个promise就会好理解许多