vue中异步函数async和await

vue中异步函数async和await的用法

一,异步函数async

1.1,async作为一个关键字放到函数前面,用于表示函数是一个异步函数,因为async就是异步的意思, 异步函数也就意味着该函数的执行不会阻塞后面代码的执行。 写一个async 函数。就是在函数前面加上async 关键字,来表示它是异步的,那怎么调用呢?async 函数也是函数,平时我们怎么使用函数就怎么使用。为了表示它没有阻塞它后面代码的执行,我们在async 函数调用之后加一句console.log。

async timeout() {
    return 'timeout()方法执行。'
},
test () {
    this.timeout()
    console.log('虽然我在后面,但是我先执行!')
}

执行结果:

1.2,接下来我们看一看timeout()执行返回了什么? 把上面的 timeout() 语句改为console.log(timeout())。

async timeout() {
    return 'timeout()方法执行。'
},
test () {
    console.log(this.timeout())
    console.log('虽然我在后面,但是我先执行!')
}

执行结果:

1.3, 可以发现原来async 函数返回的是一个promise 对象,如果要获取到promise 返回值,我们应该用then 方法, 继续修改代码。

async timeout() {
    return 'timeout()方法执行。'
},
test () {
    this.timeout().then(res => {
        console.log(res)
    })
    console.log('虽然我在后面,但是我先执行!')
}

执行结果:

1.4,我们获取到了"timeout()方法执行。', ,同时timeout 的执行也没有阻塞后面代码的执行,和我们刚才说的一致。此时你可能注意到控制台中的Promise 有一个resolved,这是async 函数内部的实现原理。如果async 函数中有返回值当调用该函数时,内部会调用Promise.resolve() 方法把它转化成一个promise 对象作为返回,但如果timeout 函数内部抛出异常呢? 那么就会调用Promise.reject() 返回一个promise 对象,继续修改一下timeout 函数。

async timeout(flag) {
    if(flag) {
        return 'timeout()方法执行。'
    } else {
        throw 'timeout()方法执行失败!'
    }
    },
test () {
    console.log(this.timeout(true))
    console.log(this.timeout(false))
    // console.log('虽然我在后面,但是我先执行!')
}

执行结果:

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

async timeout(flag) {
    if(flag) {
        return 'timeout()方法执行。'
    } else {
        throw 'timeout()方法执行失败!'
    }
    },
test () {
    console.log(this.timeout(true))
    this.timeout(false).then(res => {
        console.log(res)
    })
    // console.log('虽然我在后面,但是我先执行!')
}

执行结果:

二,同步函数await

1.1,await是等待的意思,代码执行到 await 表示等一下,代码就暂停到这里,不再向下执行了,它等什么呢?等后面的promise对象执行完毕,然后拿到promise resolve 的值并进行返回,返回值拿到之后,它继续向下执行。。注意await 关键字只能放到async 函数里面,在vue中开启Eslint 会检测到。

calculate (var1) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(1000*var1)
        }, 3000)
      })
    },
async getCalcResult (params) {
    console.log('等待计算结果中...')
    const result = await this.calculate(params)
    console.log('获取计算结果为:' + result)
},
test () {
    this.getCalcResult(10)
}

执行结果:

总结:async 和 await 基于 promise 的。 使用 async 的函数将会始终返回一个 promise 对象。 这一点很重要。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue使用asyncawait,可以通过在方法前面加上async关键字来定义异步函数,然后在需要等待的地方使用await关键字等待异步操作的结果。例如,可以在Vue组件的方法使用asyncawait来处理异步请求。 引用\[1\]的示例代码展示了在Vue使用asyncawait的基本用法。可以定义一个异步函数,使用await关键字等待axios.get方法返回的Promise对象的结果。然后可以在异步函数外部使用.then方法来处理异步操作的结果。 引用\[2\]提到,async/await是一种编写异步代码的新方法,它建立在Promise的基础上,让异步代码看起来更像同步代码。它的使用场景包括处理异步请求、处理定时器、处理文件读写等。 总结起来,在Vue使用asyncawait可以更方便地处理异步操作,使代码更加清晰易读。可以在Vue组件的方法使用async关键字定义异步函数,然后使用await关键字等待异步操作的结果。这样可以避免回调地狱,使代码更加简洁和易于维护。 #### 引用[.reference_title] - *1* [Vue接口调用(三)async/await用法](https://blog.csdn.net/m0_55990909/article/details/123981292)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [vue使用asyncawait(一文教会你)](https://blog.csdn.net/m0_52040370/article/details/124660219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Vueasyncawait的使用](https://blog.csdn.net/m0_58974838/article/details/117636647)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值