Promise在前端的作用

Promise的执行规则

1
2
3
4
5
6
7
8
9
10
new Promise((resolve, reject) => {
setTimeout(() => {
//resolve("第一个参数");
reject("第二个参数");
}, 2000)
}).then(val => {
console.log("执行了resolve")
}).catch(err => {
console.log("执行了reject");
})

解释:

读懂代码如何执行,就懂了promise的使用了

一定要看懂它们!!!

一定要看懂它们!!!

一定要看懂它们!!!

Promise的构造函数中,是一个函数(暂时本文私底下就叫它“小涵“吧),这个函数也需要两个参数(一般命名为resolve、reject),resolve和reject这两个参数也是函数。巧妙之处就在于:当Promise构造函数的参数”小涵“中执行了resolve(可传参)这个函数,就会执行Promise后面的then函数,同时resolve的实参,会传给then中形参;同理,如果执行了reject(可传参)函数,就会执行Promise后面的catch函数,同时reject的实参,会传给catch中的形参。

应用

根据上面分析的promise的特点,前端通常会用它辅助Axios网络请求一块使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
new Promise((resolve, reject) => {
axios({ //在Promise的内部可以执行一个axios的一个网络请求,然后根据axios的执行结果,选择执行resolve和reject函数
url: url
method: 'post',
data: {
}
}).then((res) => {
resolve(res.data); //请求成功,执行resolve
// console.log(res);
}).catch(function (error) {
reject(error); //请求失败,执行reject
// console.log(error);
});
}).then(data => {
console.log("执行成功,请求结果为:" + data);
}).catch(err => {
console.log("执行失败,失败信息为:" + err);
});

补充

在执行axios请求的时候,我们一般还会在Promise内部,在加一层setTimeOut(function(){},1000),将axios请求的代码,放到setTimeOut中去。

Contents
  1. 1. Promise的执行规则
    1. 1.1. 解释:
  2. 2. 应用
    1. 2.1. 补充
|