Promise的四个静态方法
howcode 2022-10-07 0 Promise
# resolve
代码
// 得到的是一个成功的Promise对象
Promise.resolve = function (val) {
return new Promise((resolve, reject) => {
resolve(val);
});
};
1
2
3
4
5
6
2
3
4
5
6
调用
Promise.resolve(200).then((res) => {
console.log(res);
});
1
2
3
2
3
# reject
代码
// 得到的是一个失败的Promise对象
Promise.reject = function (val) {
return new Promise((resolve, reject) => {
reject(val);
});
};
1
2
3
4
5
6
2
3
4
5
6
调用
Promise.reject(200).then(res => {
console.log(res,"===");
}, err => {
console.log(err);
})
1
2
3
4
5
2
3
4
5
# race
代码
// race:竞速原则,谁先满足条件,谁先处理,其他忽略
// Promise.race([promise1,promise2,promise3]).then(res=>{})
Promise.race = function (promises) {
return new Promise((resolve, reject) => {
// 遍历promises,看谁先满足条件就先处理
// Promise的状态只能改变一次,只要第一个修改了,后续再改也没用
promises.forEach((p) => {
p.then(resolve, reject);
});
});
};
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
调用
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 1000);
});
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(2);
}, 2000);
});
let p3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3);
}, 3000);
});
Promise.race([p1, p2, p3]).then((res) => {
console.log(res);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# all
代码
// all:等待原则,传入多个promise,等所有的promise都满足条件,返回所有的成功结果
Promise.all = function (promises) {
let arrResult = []; // 存放结果
let count = 0; // 计数器
function processData(index, val, resolve) {
arrResult[index] = val; // 按顺序存取结果
count++;
if (count === promises.length) {
resolve(arrResult);
}
}
return new Promise((resolve, reject) => {
for (let i = 0; i < promises.length; i++) {
promises[i].then((res) => {
processData(i, res, resolve);
}, reject);
}
});
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
调用
let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 1000);
});
let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(2);
}, 2000);
});
let p3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(3);
}, 3000);
});
Promise.all([p1, p2, p3]).then((res) => {
console.log(res);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
评论
- 表情
——暂无评论——