[英]Express resolving route before API call completes
好的,完全披露我是一個業余愛好者,所以我知道我的知識存在差距。 但是,我為此嘗試了各種解決方案,但一直無法得到有效的答案。
期望的結果
我調用我的 Express 服務器,它從外部 API 獲取數據,並在檢索到數據后呈現。
問題
無論我如何布置async/await
模式,我似乎都無法讓 Express 等待。 目前我的代碼如下:
Express.js
app.get('/getInventory', async (req, res) => {
try {
let inventory = await api.getInventory(req.query.id)
console.log(inventory)
res.json(inventory)
}
catch(err) {
console.log(err)
}
})
我的api.js
目前是這樣的:
exports.getInventory = async function(id){
let data = await manager.getInventoryContents(id, 570, 2, true, (err, inventory) => {
if (err) {
console.log(err)
Promise.reject(err)
}
else {
console.log('Success')
Promise.resolve(inventory)
}
})
return data
}
如果您想知道我有console.log()
操作只是為了嘗試看看什么時候發生了。
到目前為止我得到了什么
幾乎所有變體我都將Express.js
庫存設為undefined
(類似地沒有數據發送到客戶端),但是我從api.js
收到Success
消息(甚至庫存本身)。
我猜一旦我完成它,正確的語法是顯而易見的,但我似乎無法正確地將它傳遞給 function。 我錯過了什么?
嘗試這個:
exports.getInventory = async function(id){
return new Promise((resolve, reject) => {
manager.getInventoryContents(id, 570, 2, true, (err, inventory) => {
if (err) {
console.log(err);
reject(err);
}
else {
console.log('Success');
resolve(inventory);
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.