javascript - 如何在非async函數(shù)下使用await
問題描述
await需要在async函數(shù)中使用,所以每次我們想要使用await必須先在async函數(shù)中定義,然后調(diào)用這個(gè)async函數(shù)。
就比如這樣
async function fn(){}fn()
詳細(xì)一點(diǎn)的例子
async function asy(){ // 獲取當(dāng)前城市的位置 獲取熱門城市 獲取所有城市 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然后再調(diào)用,這一個(gè)過程我覺得略微麻煩以及重復(fù),所以想問下是否存在什么辦法優(yōu)化或者解決這一問題?
問題解答
回答1:async 可以不需要 await, await 必須依賴 async
回答2:async聲明的函數(shù)返回值是Promise對(duì)象:
這樣一個(gè)函數(shù)
async function fn() {}
使用await就需要放在async函數(shù)中
async function anthor() { await fn()}
不使用await就當(dāng)作Promise用
function anthor() { fn().then(...).catch(...)}回答3:
試試這樣
function asy(){ // 獲取當(dāng)前城市的位置 獲取熱門城市 獲取所有城市 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);
相關(guān)文章:
1. Docker for Mac 創(chuàng)建的dnsmasq容器連不上/不工作的問題2. javascript - QWebEngineView 如何爬 angular 的動(dòng)態(tài)數(shù)據(jù)?3. javascript - 使用angular 的ui-sref 中出現(xiàn)了中文參數(shù),點(diǎn)擊跳轉(zhuǎn)后瀏覽器的地址欄里出現(xiàn)轉(zhuǎn)義后的%AE....%a%44. java - ConcurrentHashMap中的get()方法為什么可以不加鎖?5. java - 郵箱如何發(fā)送html內(nèi)容6. html5 - 這個(gè)代碼顯示功能如何實(shí)現(xiàn)?7. javascript - 用JS 七牛上傳圖片出現(xiàn)文件已存在的錯(cuò)誤(file exists)8. java - 字節(jié)流轉(zhuǎn)成字符串之后,在通過字符串轉(zhuǎn)成字節(jié)流后的文件為什么會(huì)不一樣?9. css3 - 圖片等比例縮放10. java - 一段遞歸代碼的問題
