javascript - 如何在非async函数下使用await
问题描述
await需要在async函数中使用,所以每次我们想要使用await必须先在async函数中定义,然后调用这个async函数。
就比如这样
async function fn(){}fn()
详细一点的例子
async function asy(){ // 获取当前城市的位置 获取热门城市 获取所有城市 const [resCityGuess,resCityHot,resCityAll]=await Promise.all([ this.http.get(’api/v1/cities?type=guess’), this.http.get(’api/v1/cities?type=hot’), this.http.get(’api/v1/cities?type=group’) ]) this.cityGuessName=resCityGuess.data.name; this.cityGuessId=resCityGuess.data.id; this.cityHot=resCityHot.data; this.cityAll=resCityAll.data;}asy.apply(this);
每次使用await之前都需要多定义一次async然后再调用,这一个过程我觉得略微麻烦以及重复,所以想问下是否存在什么办法优化或者解决这一问题?
问题解答
回答1:async 可以不需要 await, await 必须依赖 async
回答2:async声明的函数返回值是Promise对象:
这样一个函数
async function fn() {}
使用await就需要放在async函数中
async function anthor() { await fn()}
不使用await就当作Promise用
function anthor() { fn().then(...).catch(...)}回答3:
试试这样
function asy(){ // 获取当前城市的位置 获取热门城市 获取所有城市 Promise.all([this.http.get(’api/v1/cities?type=guess’),this.http.get(’api/v1/cities?type=hot’),this.http.get(’api/v1/cities?type=group’) ]).then(values =>{this.cityGuessName=resCityGuess.data.name;this.cityGuessId=values[0].data.id;this.cityHot=values[1].data;this.cityAll=values[2].data; });}asy.apply(this);
相关文章:
1. mysql - AttributeError: ’module’ object has no attribute ’MatchType’2. javascript - JS设置Video视频对象的currentTime时出现了问题,IE,Edge,火狐,都可以设置,反而chrom却...3. javascript - 图片能在网站显示,但控制台仍旧报错403 (Forbidden)4. MySQL客户端吃掉了SQL注解?5. 网页爬虫 - python爬虫翻页问题,请问各位大神我这段代码怎样翻页,还有价格要登陆后才能看到,应该怎么解决6. 数据库 - MySQL 单表500W+数据,查询超时,如何优化呢?7. objective-c - iOS怎么实现像QQ或者微信的实时推送8. php自学从哪里开始?9. 求大神帮我看看是哪里写错了 感谢细心解答10. phpstady在win10上运行
