Promise.all方法
Promise的all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。Promise.all 方法接收一个数组作为参数,数组中每一项都是Promise 对象的实例。
/* 两个请求需要同时调用,并且接口数据需要一起出来 */
function fn1(){
return new Promise((reslove,reject)=>{
setTimeout(()=>{
reslove('1111');
},1000)
})
}
function fn2(){
return new Promise((reslove,reject)=>{
setTimeout(()=>{
reslove('2222');
},2000)
})
}
/* 需求:需要两个接口的数据都返回了再渲染页面 */
Promise.all([fn1(),fn2()]).then(res=>{console.log(res);}) ==>['1111','2222']
复制代码
Promise.race方法
Promise.race 方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。
Promise.race([fn1(),fn2()]).then(res=>{console.log(res);}) ==>'1111'
复制代码
只要参数的数组之中有一个实例率先改变状态,那个率先改变的Promise实例的返回值,就是返回值res。
async function 异步函数
异步函数 async function 中可以使用 await 指令,await 指令后必须跟着一个 Promise,异步函数会在这个 Promise 运行中暂停,直到其运行结束再继续运行。处理异常的机制通过 try-catch 块实现。
async function asyncFunc() {
try {
await new Promise(
function (resolve, reject) {
throw "Some error"; // 或者 reject("Some error")
});
} catch (err) {
console.log(err); // 会输出 Some error
}
}
asyncFunc();
复制代码
如果 Promise 有一个正常的返回值,await 语句也会返回它:
async function asyncFunc() {
let value = await new Promise(
function (resolve, reject) {
resolve("Return value");
});
console.log(value);
}
asyncFunc();