• uni-app 项目记录


    await
    等候,等待;期待

    什么是async、await
    await 用于等待异步完成
    通常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

    file
    file

    async/await
    file

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

    file
    file
    file

    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


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


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

    欢迎关注达达的简书!

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

    博客

  • 相关阅读:
    Python3 WebDriver操作cookie的方法
    Windows创建定时任务执行Python脚本
    Python3 自定义请求头消息headers
    为什么SQL用UPDATE语句更新时更新行数会多3行有触发器有触发器有触发器有触发器有触发器有触发器
    【C#】C#获取文件夹下的所有文件
    jQuery.ajax()调用asp.net后台方法(非常重要)
    Asp.Net+JQuery.Ajax之$.post
    c# post 接收传来的文件
    C#使用GET、POST请求获取结果,这里以一个简单的用户登陆为例。
    javascript中let和var的区别
  • 原文地址:https://www.cnblogs.com/dashucoding/p/11688589.html
Copyright © 2020-2023  润新知