async/await的使用

关于asyncawait使用

在每一个函数前面的都加上async,函数内部,如果是异步操作,直接在其前面加上await即可,等待一步函数执行的结果。await后面可以接任何变量,可以是常量或者promiseasync修饰的函数自动变成一个promise.正常情况下,await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise 对象。

//经过async修饰之后,自动变成promise对象
async function f() { return 'hello world'; } f().then(v => console.log(v)) // "hello world" async function f() { return await 123; } f().then(v => console.log(v)) // 123 
//错误处理 
async function f() { throw new Error('出错了'); } f().then( v => console.log(v), e => console.log(e) ) // Error: 出错了

async中错误处理

//使用catch捕捉错误
async function f() { await Promise.reject('出错了'); } f() .then(v => console.log(v)) .catch(e => console.log(e)) // 出错了
async function main() { try { var val1 = await firstStep(); var val2 = await secondStep(val1); var val3 = await thirdStep(val1, val2); console.log('Final: ', val3); } catch (err) { console.error(err); } }
//使用async控制指定时间打印
function timeout(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); } async function asyncPrint(value, ms) { await timeout(ms); console.log(value) } asyncPrint('hello world', 50); 

多种形式

const foo = async function(){} async function foo(){} const foo = async () => {};

并发处理

let foo = await getFoo();
let bar = await getBar(); //====================== // 写法一 let [foo, bar] = await Promise.all([getFoo(), getBar()]); // 写法二 let fooPromise = getFoo(); let barPromise = getBar(); let foo = await fooPromise; let bar = await barPromise; //使用下面的方式是,使一步操作同时触发。最上面的方式是同步执行。 //并发执行的方式选择 async function dbFuc(db) { let docs = [{}, {}, {}]; let promises = docs.map((doc) => db.post(doc)); let results = await Promise.all(promises); console.log(results); } // 或者使用下面的写法 //使用for循环控制了使用await的时间 async function dbFuc(db) { let docs = [{}, {}, {}]; let promises = docs.map((doc) => db.post(doc)); let results = []; for (let promise of promises) { results.push(await promise); } console.log(results); }

猜你喜欢

转载自www.cnblogs.com/wangjiahui/p/11331764.html