pakhozou
论坛版主
论坛版主
  • 最后登录2023-03-16
  • 发帖数21
  • 社区居民
  • 忠实会员
阅读:11608回复:9

[javascript]async -await基本使用方法以及注意事项

楼主#
更多 发布于:2020-05-15 08:44
是一个用同步的思维来解决异步问题的方案,当前端接口调用需要等到接口返回值以后渲染页面。


需要注意的是:
1.await 必须出现在 async 函数内部,不能单独使用。
2.async  -await 是 promise 的语法糖,它还是使用了 Promise,所有不能完全代替 Promise。
3.async  -await 使异步代码看起来像同步代码一样操作,这也是他的特点。


async  -await 的使用方法如下:
1.定义  async
需要定义一个有 async 关键字的函数,async 需要放在函数的最前面,用于表示该函数是一个异步函数,async 本身的意思就是异步, async 函数本身返回的就是一个 promise 对象,如果 async 关键字函数返回的不是promise,则会自动用Promise.resolve();包装。
代码如下:
async function demo(){
//await 等待方式
}
2.使用 Promise

需要定义一个返回 Promise 的函数。
resolve 和 reject 的作用是将Promise中的函数要传递的值,前者表示执行成功可返回解析后的 promise 对象,后者表示执行失败可抛出带有失败原因的 promise 的对象。
代码如下:
function a1(){
   return new Promise((resolve,reject)=>{
    //执行的操作
  })
}
3.使用 await

需要在 async 函数里使用 await 等待,那它在等待什么呢?它等待的是右侧表达式的结果,这个结果可以是
Promise 对象或者其他值。
如果不是一个 promise 对象,那么 await 表达式的运算结果就是右边的值,
如果是一个 promise 对象,那么它就会阻塞后面的代码,等待 promise 传过来的 resolve 的值,然后作为结果,这里返回的则为一个 promise 对象。
注:await 只能和 async 一起使用.
代码如下:
async function demo(){
    var a = await a1()  //申明await等待
}


接下来则是执行顺序:
在遇到 await 过后会阻塞后面的代码,所以会先执行 async 外面的同步代码,同步代码执行完成过后,再返回到 async 内继续执行 await 后面的代码。


示例代码:
//asnyc - await 异步处理方法
    router.get("/index.html",function (req,resp){
        getData(req,resp);
    });
    async function getData(req,resp){
        let bannerData = await getLunBo();
        resp.render("index",{banner:bannerData});
    }
    function getLunBo(){
        return new Promise((resolve,reject)=>{
            let sql ="select * from banner where KeyName in ('isLunBo')";
            DB.query(sql,[],function (err,data) {
                if (err){
                    reject(err);
                }else {
                    resolve(data);
                }
            })
        })
    }



async  -await 的优缺点:
优点:
相对于 promise 来说,async  -await 的处理 then 的调用链,代码要比 promise 更加清晰,会更容易阅读。
缺点:
因为 await 执行会阻塞后面代码,所以滥用await会到导致性能降低。

总的来说 async 是用于申明一个异步 function ,而 await 用于等待一个异步方法执行完成,而这个异步方法的实现需要用到Promise。
pakhozou
论坛版主
论坛版主
  • 最后登录2023-03-16
  • 发帖数21
  • 社区居民
  • 忠实会员
沙发#
发布于:2020-05-15 08:47
windymu:我好喜欢楼主   求回复回到原帖
我也好喜欢你
windymu
新手
新手
  • 最后登录2020-08-05
  • 发帖数13
  • 社区居民
板凳#
发布于:2020-05-15 08:46
我好喜欢楼主   求回复
吴海218
贫民
贫民
  • 最后登录2020-07-27
  • 发帖数4
地板#
发布于:2020-05-15 08:46
我先来打个样
windymu
新手
新手
  • 最后登录2020-08-05
  • 发帖数13
  • 社区居民
4楼#
发布于:2020-05-15 08:46
给大脑点点关注
wjwjwj
新手
新手
  • 最后登录2020-10-16
  • 发帖数3
  • 社区居民
5楼#
发布于:2020-05-15 08:46
666
windymu
新手
新手
  • 最后登录2020-08-05
  • 发帖数13
  • 社区居民
6楼#
发布于:2020-05-15 08:45
我是水军
windymu
新手
新手
  • 最后登录2020-08-05
  • 发帖数13
  • 社区居民
7楼#
发布于:2020-05-15 08:45
爱上对方过后就哭了
pakhozou
论坛版主
论坛版主
  • 最后登录2023-03-16
  • 发帖数21
  • 社区居民
  • 忠实会员
8楼#
发布于:2020-05-15 08:44
氛围起来了哈氛围起来了哈
YuKi
论坛版主
论坛版主
  • 最后登录2024-03-25
  • 发帖数20
  • 社区居民
9楼#
发布于:2020-05-15 08:44
气氛起来了哈
游客


返回顶部

公众号

公众号