promise2

131 阅读1分钟

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();