javascript - 如何在非async函數(shù)下使用await
問(wèn)題描述
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è)過(guò)程我覺(jué)得略微麻煩以及重復(fù),所以想問(wèn)下是否存在什么辦法優(yōu)化或者解決這一問(wèn)題?
問(wèn)題解答
回答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. html5 - datatables 加載不出來(lái)數(shù)據(jù)。2. node.js - mongodb查找子對(duì)象的名稱為某個(gè)值的對(duì)象的方法3. 測(cè)試自動(dòng)化html元素選擇器元素ID或DataAttribute [關(guān)閉]4. html5和Flash對(duì)抗是什么情況?5. 利用IPMI遠(yuǎn)程安裝centos報(bào)錯(cuò)!6. javascript - QQ第三方登錄的問(wèn)題7. 在mac下出現(xiàn)了兩個(gè)docker環(huán)境8. 運(yùn)行python程序時(shí)出現(xiàn)“應(yīng)用程序發(fā)生異常”的內(nèi)存錯(cuò)誤?9. spring-mvc - spring-session-redis HttpSessionListener失效10. 正在使用electron和node.js做桌面應(yīng)用,需要實(shí)時(shí)監(jiān)聽(tīng)是否有網(wǎng)絡(luò)連接,node或者electron是否可以做到

網(wǎng)公網(wǎng)安備