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新建用户设置可以远程访问的问题2. python - 求一个在def中可以实现调用本def满足特定条件continue效果的方法(标题说不太清楚,请见题内描述)3. java - mybatis怎么实现在数据库中有就修改,没有就添加4. $fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题5. node.js - nodejs和前端JavaScript 字符串处理结果不一样是什么原因?6. mysql - SQL操作时间的函数?7. mysql - 我的myeclipse一直连显示数据库连接失败,不知道为什么8. mysql 5.7单表300万数据,性能严重下降,如何破?9. mysql 为何insert的时候会有lock wait timeout 异常10. mysql同步数据到elasticsearch用什么工具?
![$fields = $values = [];这条代码一直定义不了,一直报错,老师的源码也是被报错的,执行不了,请问该怎么解决这个问题](http://www.haobala.com/attached/image/news/202205/093622cb60.png)