在 API 调用完成之前快速解析路由

时间:2021-03-17 18:01:05

标签: javascript node.js express async-await

好的,完全公开我是一个业余编码员,所以我知道我的知识存在差距。但是,我为此尝试了各种解决方案,但一直无法得到有效的答案。

想要的结果

我调用我的 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(同样没有数据发送到客户端),但是我收到了 Success 消息(甚至库存本身)来自 api.js

我猜一旦我完成它,正确的语法是显而易见的,但我似乎无法让它正常运行。我错过了什么?

1 个答案:

答案 0 :(得分:0)

试试这个:

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);
         }
      }
   }
}