【问题标题】:Express resolving route before API call completes在 API 调用完成之前快速解析路由
【发布时间】:2021-03-18 04:10:51
【问题描述】:

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

期望的结果

我调用我的 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(类似地没有数据发送到客户端),但是我从@987654329收到Success消息(甚至库存本身) @。

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

【问题讨论】:

    标签: javascript node.js express async-await


    【解决方案1】:

    试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-04
      • 2021-01-15
      • 2015-09-07
      • 1970-01-01
      相关资源
      最近更新 更多