[英]Async/Await not waiting for promise to finish
我有這樣的帖子路線:
app.post("/new", async (req, res) => {
const Lob = require("lob")({ apiKey: keys.LOB_API });
let toAddress = await lobFuncs.toAddress(req.body.addrLine1, Lob);
console.log("test");
});
toAddress()函數如下所示:
toAddress: async (address, Lob) => {
await this.parseGoogleCiv(address, obj => {
console.log(obj);
});
},
parseGoogleCiv: async (address, callback) => {
address = address
.trim()
.split(" ")
.join("%20");
let URL = "some long URL"
await request(URL, function(err, res) {
if (err) {
console.log(err);
} else {
let body = JSON.parse(res.body);
callback(body);
}
});
}
但這是我的輸出...
test
body
“測試”輸出應在正文輸出之后。
問題:這是怎么回事? 據我所知,我認為我沒有正確地執行所有異步/喚醒操作,因為我沒有收到承諾錯誤。 有任何想法嗎?
問題在於您基本上不等待parseGoogleCiv函數中的任何事情。 可以做:
parseGoogleCiv: async (address) => {
address = address
.trim()
.split(" ")
.join("%20");
let URL = "some long URL"
try {
return JSON.parse(
(await new Promise((resolve,rej) => request(URL, function(err, res) {
if(err) return rej(err);
resolve(res);
}))).body
);
} catch(err){
console.log(err);
}
}
如果使用承諾的請求版本,這可能會更優雅:
parseGoogleCiv(address){
address = address
.trim()
.split(" ")
.join("%20");
const url = "someurl";
return request(url)
.then(res => JSON.parse( res.body ))
.catch( err => console.log(err));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.