美文网首页
async和await用法

async和await用法

作者: 扶得一人醉如苏沐晨 | 来源:发表于2023-03-06 09:08 被阅读0次

    一、基本用法

    async 表示函数里有异步操作,

    await 表示紧跟在后面的表达式需要等待结果。

    async function getStockPriceByName(name) {
      var symbol = await getStockSymbol(name);
      var stockPrice = await getStockPrice(symbol);
      return stockPrice;
    }
    
    getStockPriceByName('goog').then(function (result){
      console.log(result);
    });
    

    上面代码是一个函数,函数前面的async关键字,表明该函数内部有异步操作。调用该函数时,会立即返回一个Promise对象

    下面的例子,指定多少毫秒后输出一个值

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

    二、注意事项

    1、await 命令后面的 Promise 对象,运行结果可能是 rejected,所以最好把 await 命令放在try...catch 代码块中。

    async function myFunction() {
      try {
        await somethingThatReturnsAPromise();
      } catch (err) {
        console.log(err);
      }
    }
    
    

    2、await 命令只能用在 async 函数之中,如果用在普通函数,就会报错。如果将 forEach 方法的参数改成 async 函数,也有问题。

    正确的写法是采用 for 循环

    async function dbFuc(db) {
      let docs = [{}, {}, {}];
    
      for (let doc of docs) {
        await db.post(doc);
      }
    }
    

    3、如果确实希望多个请求并发执行,可以使用 Promise.all 方法。

    async function dbFuc(db) {
      let docs = [{}, {}, {}];
      let promises = docs.map((doc) => db.post(doc));
    
      let results = await Promise.all(promises);
      console.log(results);
    }
    
    // 或者使用下面的写法
    
    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用法

          本文链接:https://www.haomeiwen.com/subject/ptnuldtx.html