【问题标题】:How to wait on async response in Express before responding to AJAX request?如何在响应 AJAX 请求之前等待 Express 中的异步响应?
【发布时间】:2019-04-28 00:18:20
【问题描述】:

我正在对我的 Express 服务器进行 AJAX 调用,然后需要向数据库发出异步请求。我尝试过使用 await/async 并用.then 做出承诺。

问题是,我的服务器在到达testfunc 的末尾后会自动响应,而不是等待 promise 或 return 语句。

这会导致将空值发送回客户端。有没有办法让 Express 在响应 AJAX 请求之前等待承诺或返回?

以下是我正在尝试的示例。

exports.testFunc = function(){

    var data = []

    asyncCall().then(function () {
        //Populate data array

        return { 'data' : data } 
    })
}

【问题讨论】:

    标签: node.js ajax express


    【解决方案1】:

    当异步函数完成时,处理程序需要显式写入快速响应对象

    https://expressjs.com/en/api.html#res

    当前处理程序将被执行,并且返回被隐式解释为响应完成。缺少的是您的异步​​操作与响应完成之间的联系。这应该通过快速响应对象来处理。

    当你的异步操作完成后,你可以调用 res.send

    【讨论】:

    • app.get('/testFunc', (req, res) => res.send( funcs.testFunc() ) ) 我有这样的东西,但是响应是在返回语句发生之前发送的。我知道这一点是因为客户端在服务器控制台记录任何内容之前得到响应。 (如果我在return之前放了一个log语句)
    • testFunc 需要访问 res 对象。您可以将其作为参数传递给 testFunc。当异步操作完成时,需要从 testFunc 调用 res.send。在您的评论 wxample 中,当收到请求时,会调用测试函数,它会立即返回(异步操作已启动但)并立即调用 res.send(如您在问题中描述的那样)
    • 哇,与我脑海中的想法相比,这简直太简单了。我一直在用头撞墙。非常感谢!
    猜你喜欢
    • 2019-09-30
    • 2020-04-20
    • 2014-04-24
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2011-09-03
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多