async/await实现Promise.acll()简介
在ES8中(或者称为ES2017),异步函数(async/await)被正式加入ECMAScript标准中,它们是一种更加简单、更容易阅读的异步编程语言,相较于Promise更方便实用。在本文中,我们将会详细讲解如何使用async/await实现Promise.acll()的效果。
Promise.all()的简介:
Promise.all()用于将多个Promise实例封装成一个新的Promise实例,当多个Promise实例状态都发生变化时,Promise.all()返回的实例状态才会改变,对应返回的值也为一个数组,数组元素为每个Promise实例resolve()时返回的值。但是,当其中一个Promise实例reject()了,则Promise.all()的返回值就变成了该Promise实例reject()的值。
下面,我们采用一个类似于Promise.all()的案例,来演示如何通过async/await实现Promise.all()的效果。
示例一:
注:本示例在Node.js v8.0.0之后的版本运行起效果较好
async function promiseAll(promises) {
const results = [];
for (const promise of promises) {
results.push(await promise);
}
return results;
}
//测试案例代码
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);
async function test() {
const res = await promiseAll([p1, p2, p3]);
console.log(res);
}
test();
示例二:
本示例将Promise.all()用async/await封装在类中,以实现一种更加方便的使用方式。
class MyClass {
async promiseAll(promises) {
const results = [];
for (const promise of promises) {
results.push(await promise);
}
return results;
}
}
//测试案例代码
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);
const instance = new MyClass();
async function test() {
const res = await instance.promiseAll([p1, p2, p3]);
console.log(res);
}
test();
以上是使用async/await实现Promise.all()的两个示例案例,思路简单,代码易懂,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:async/await实现Promise.acll()简介 - Python技术站