async/await的使用

Posted wangjiahui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

以上是关于async/await的使用的主要内容,如果未能解决你的问题,请参考以下文章

Webdriverio 使用 async/await - 推荐啥? [关闭]

async与await的使用

.NET Web应用中为什么要使用async/await异步编程

async和await

async和await

浅谈async/await