zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    「SHOI2016」黑暗前的幻想乡 解题报告
    「ZJOI2016」大森林 解题报告
    「ZJOI2016」旅行者 解题报告
    「HNOI2016」树 解题报告
    「HNOI2016」序列 解题报告
    SP8791 DYNALCA
    iOS代码封装成.a文件(封装SDK)
    iOS开发总结-Xcode常见错误
    iOS开发之loadView、viewDidLoad及viewDidUnload的关系
    iOS 8 之后的动态沙盒路径
  • 原文地址:https://www.cnblogs.com/wangjiahui/p/11331764.html
Copyright © 2011-2022 走看看