请教下await和async的理解问题

async function testResult() {
    let first = await doubleAfter2seconds(30);
    let second = await doubleAfter2seconds(50);
    let third = await doubleAfter2seconds(30);
    console.log(first + second + third);
}

function doubleAfter2seconds(num) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(2 * num)
        }, 2000);
    } )
}

function a(){
    console.log(1)
}

a()
testResult()
console.log('success')

百度后看到这么一段代码
async是将方法异步处理
await是等待方法执行成功后再执行下面的代码,相当于抵消了async的作用?
(这两个是这么理解吗)


我今天看到个这种写法,这种有什么作用呢?求大佬解惑

await this.getConfig()

async getConfig() {
            var res = await this.$get('server/paotui/getconfigbyuid')
            if (res.errcode != 0) {
                this.$toast(res.errmsg);
                return;
            }
            this.feeOptions = res.config.xiaofei
        },
阅读 3.2k
5 个回答

async是标识这是个异步函数,在此函数内部可使用await,await顾名思义就是等待,等待await后面的代码执行,比如等待一个请求,等待期间程序可以做其他事,也就相当于在此处中断退出,当请求返回后,引擎会重新执行await下面的的代码。

https://www.bookstack.cn/read...

https://developer.mozilla.org...

你这么理解也不是不行。不过需要注意,异步操作不会冻结 UI,等待期间其它操作还能继续,如果想深入理解,还是得看看 event loop 相关的知识。

至于作用,await/async 可以大大降低代码的理解难度,减少我们的心智负担,让你可以用你前面的方式理解异步操作。

async标识函数为异步函数,await 等待的是一个promise异步返回
在此期间其他函数还能继续执行,只是此异步函数内的await在等待阻塞

async函数会返回一个promise实例,await会获取一个thenable对象的then callback的回调结果(如果await一个promise就会获得promise fulfilled的结果),建议好好学明白promise就很容易理解了

你可以这么理解:
当我需要等待其他操作完成时加入,await。但是自己写的这个函数就必须添加async,变成了异步函数,其他人如果要同步调用则一定要加await。然后你就会理解这个设计模型,并不是消灭异步,而是把异步传导出去,仅仅实现自己函数内部可以同步执行。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题