async/await
1.async关键字只能放在函数前,被async润饰的函数返回的是一个promise,其值主动被包装在promise的resolve中
async function func() { return 1}
2.await只能在async包裹的函数能应用,await会让JavaScript引擎期待直到promise实现并返回后果
async function f() { let promise = new Promise((resolve, reject) => { setTimeout(() => resolve("done!"), 1000) }); let result = await promise; // 期待,直到 promise resolve (*) alert(result); // "done!"}f();
async+await相当于promise.then,然而只会承受resolve、不会解决reject
3.try...catch应用try...catch在包裹await来解决promise返回的reject,当遇到reject会间接跳到catch中
async function fucntionTry() { try { let promiseResolve =await new Promise((resolve,reject) => { setTimeout(()=>resolve('5秒'),5000) }) console.log(promiseResolve) let promiseReject = await new Promise((resolve,reject) => { reject('I am Reject') }) let promiseEnd = await new Promise((resolve,reject) => { resolve('Process End') }) console.log(promiseEnd) } catch(err) { console.log('try catch ', err) } } fucntionTry()
4.prmoise.all([])用于同时执行多个promise,留神promise.all中的promise是异步执行的
async function PromiseAll() { try { let promiseArray = await Promise.all([ new Promise((resolve,reject) => {resolve(1)}), new Promise((resolve,reject) => {resolve(2)}), new Promise((resolve,reject) => {resolve(3)}), new Promise((resolve,reject) => {resolve(4)}), ]) console.log('promiseArray', promiseArray) let promiseErrArray = await Promise.all([ new Promise((resolve,reject) => {resolve(5)}), new Promise((resolve,reject) => {reject(6)}), new Promise((resolve,reject) => {resolve(7)}), new Promise((resolve,reject) => {resolve(8)}), ]) }catch(err) { console.log('Error', err) } } PromiseAll()
同样,也能够应用try...catch包裹着,来捕捉异样