Javascript 异步/等待不等待承诺完成
我有一个邮寄路线:Javascript 异步/等待不等待承诺完成,javascript,node.js,promise,async-await,Javascript,Node.js,Promise,Async Await,我有一个邮寄路线: 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: asy
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);
}
}
如果您使用以下选项,可能会更优雅:
最后的
request()
方法接受回调,因此它似乎不返回承诺,因此wait
就在它基本无效之前。这里有一个request
的预期版本。使用它并终止回调…感谢您的回复!
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));
}