• uni-app 项目记录


    await等候,等待;期待

    什么是async、awaitawait 用于等待异步完成通常async、await都是跟随Promise一起使用的

    async返回的都是一个Promise对象同时async适用于任何类型的函数上。这样await得到的就是一个Promise对象

     async function testSync() {
         const response = await new Promise(resolve => {
             setTimeout(() => {
                 resolve("async await test...");
              }, 1000);
         });
         console.log(response);
    }
    testSync();//async await test...

     async function asyncAwaitFn(str) {
        return await new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(str)
            }, 1000);
        })
    }
    
    const serialFn = async () => { //串行执行
    
        console.time('serialFn')
        console.log(await asyncAwaitFn('string 1'));
        console.log(await asyncAwaitFn('string 2'));
        console.timeEnd('serialFn')
    }
    
    serialFn();
    async function asyncAwaitFn(str) {
        return await new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(str)
            }, 1000);
        })
    }
    const parallel = async () => { //并行执行
        console.time('parallel')
        const parallelOne = asyncAwaitFn('string 1');
        const parallelTwo = asyncAwaitFn('string 2')
    
        //直接打印
        console.log(await parallelOne)
        console.log(await parallelTwo)
    
        console.timeEnd('parallel')
    
    
    }
    parallel()

    await 操作符用于等待一个Promise 对象。它只能在异步函数 async function 中使用。表达式一个 Promise 对象或者任何要等待的值。返回值返回 Promise 对象的处理结果。如果等待的不是 Promise 对象,则返回该值本身。

    await 表达式会暂停当前 async function 的执行,等待 Promise 处理完成。若 Promise 正常处理(fulfilled),其回调的resolve函数参数作为 await 表达式的值,继续执行 async function。

    若 Promise 处理异常(rejected),await 表达式会把 Promise 的异常原因抛出。

    另外,如果 await 操作符后的表达式的值不是一个 Promise,则返回该值本身。

     function resolveAfter2Seconds(x) {
      return new Promise(resolve => {
        setTimeout(() => {
          resolve(x);
        }, 2000);
      });
    }
    
    async function f1() {
      var x = await resolveAfter2Seconds(10);
      console.log(x); // 10
    }
    f1();

     async function f2() {
      var y = await 20;
      console.log(y); // 20
    }
    f2();

     async function f3() {
      try {
        var z = await Promise.reject(30);
      } catch (e) {
        console.log(e); // 30
      }
    }
    f3();

    setTimeout,Promise,async/await的区别?file

    filefile

    async/awaitfile

    async/ await来发送异步请求,从服务端获取数据

    async的用法它作为一个关键字放到函数前面,用于表示函数是一个异步函数

     async function timeout() {
      return 'hello world';
    }

     async function timeout() {
        return 'hello world'
    }
    timeout();
    console.log('虽然在后面,但是我先执行');

    file

     async function timeout() {
        return 'hello world'
    }
    timeout().then(result => {
        console.log(result);
    })
    console.log('虽然在后面,但是我先执行');

    file

    控制台中的Promise 有一个resolved,这是async 函数内部的实现原理。

    返回一个值当调用该函数时,内部会调用Promise.solve() 方法把它转化成一个promise 对象作为返回

    函数内部抛出错误就会调用Promise.reject() 返回一个promise 对象

     async function timeout(flag) {
        if (flag) {
            return 'hello world'
        } else {
            throw 'my god, failure'
        }
    }
    console.log(timeout(true))  // 调用Promise.resolve() 返回promise 对象。
    console.log(timeout(false)); // 调用Promise.reject() 返回promise 对象。

    file

    如果函数内部抛出错误, promise 对象有一个catch 方法进行捕获。

     timeout(false).catch(err => {
        console.log(err)
    })

    await是等待的意思它后面跟着什么呢?

    注意await 关键字只能放到async 函数里面

    更多的是放一个返回promise 对象的表达式

     // 2s 之后返回双倍的值
    function doubleAfter2seconds(num) {
        return new Promise((resolve, reject) => {
            setTimeout(() => {
                resolve(2 * num)
            }, 2000);
        } )
    }
     async function testResult() {
        let result = await doubleAfter2seconds(30);
        console.log(result);
    }

    filefilefile

     const express = require('express');
    const app = express();// express.static 提供静态文件,就是html, css, js 文件
    app.use(express.static('public'));
    
    app.listen(3000, () => {
        console.log('server start');
    })

    file

    file

    file

    file

    若本号内容有做得不到位的地方(比如:涉及版权或其他问题),请及时联系我们进行整改即可,会在第一时间进行处理。

    请点赞!因为你们的赞同/鼓励是我写作的最大动力!

    欢迎关注达达的简书!

    这是一个有质量,有态度的博客

    博客

  • 相关阅读:
    如何生成a1,a2,a3,a4这样的变量名
    Swiper说明及API手册说明
    Centos下搭建 tomcat https服务器详解(原创)
    IOS 2D游戏开发框架 SpriteKit-->续(创建敌对精灵)
    AFNetworking 3.1
    IOS 2D游戏开发框架 SpriteKit-->续(postion,锚点,游戏滚动场景)
    动态加载HTML后使用query修改标签样式
    objective-c IOS应用更新
    Objective-c 动画
    java servlet上传centos服务器
  • 原文地址:https://www.cnblogs.com/dashucoding/p/11932281.html
Copyright © 2020-2023  润新知