理解async和await
async和await是用于对于异步操作的一种处理方式;
async会对指定的函数的返回结果进行Promise包装;
await会“等待”Promise的resolved结果,如果结果是reject,没有处理的话就会报错; 但是这种”等待“是必须要放在async修饰的函数中;
function takeLongTime() { return new Promise(resolve => { setTimeout(() => resolve("long_time_value"), 1000); }); } async function test() { const v = await takeLongTime(); console.log(v); } test();
await会自动的执行它的resolve,但是当Promise中返回的是reject的时候,就必须catch这个异常
async function sleep(n) { return new Promise(function(resolve, reject) { if (n) { resolve(); } else { reject(); } }); } async function ts() { return await sleep(false).catch(function (error) { console.log(error); }); } console.log(ts());
我们在使用async/await的时候会给我们带来极大的可阅读性:
这是一些异步方法:
async function ts() { return await sleep(false).catch(function (error) { console.log(error); }); } console.log(ts()); async function takeLongTime(n) { return new Promise(resolve => { setTimeout(() => resolve(n + 200), n); }); } function step1(n) { console.log(`step1 with ${n}`); return takeLongTime(n); } function step2(m, n) { console.log(`step2 with ${m} and ${n}`); return takeLongTime(m + n); } function step3(k, m, n) { console.log(`step3 with ${k}, ${m} and ${n}`); return takeLongTime(k + m + n); }
使用await:
async function doIt() { const time1 = 300; const time2 = await step1(time1); const time3 = await step2(time1, time2); step3(time1, time2, time3).then(resolve => { console.log(resolve); }); } doIt();
使用传统的promise.then链式编程:
function doIt() { console.time("doIt"); const time1 = 300; step1(time1) .then(time2 => { return step2(time1, time2) .then(time3 => [time1, time2, time3]); }) .then(times => { const [time1, time2, time3] = times; return step3(time1, time2, time3); }) .then(result => { console.log(`result is ${result}`); console.timeEnd("doIt"); }); } doIt();
借鉴于:边城 https://segmentfault.com/a/1190000007535316

浙公网安备 33010602011771号