节点:快递。如何延迟回复?

时间:2016-04-22 13:18:16

标签: javascript node.js express

我已经定义了一条路线。请求URL时,将调用异步函数,该函数将在完成时返回值。返回的值将是我对get请求的响应。所以,我想延迟response.get直到返回值。

我想过将响应传递给回调函数。

app.get("/:param", (request, response) => {
    let param = request.params.param
    search(param, response, displayResult)
})

function displayResult(info, response){
    console.log(info)
    response.end(info)
}

function search(query, response, callback) {
    request("https://www.google.co.uk", (err, response, body) => {
        if (!err && response.statusCode == 200) {
            return callback("Hello there! "+query, response)
        } else {
            console.log(err)
        }
    })
}

这不起作用。浏览器给出错误:ERR_EMPTY_RESPONSE,程序因错误而崩溃:TypeError:response.end不是函数。

我一直在寻找答案。我认为我的方法是错误的。

我的异步函数返回后如何响应?

1 个答案:

答案 0 :(得分:1)

仔细阅读您的代码。

function search(query, response, callback) {
  request("https://www.google.co.uk", (err, response, body) => {

您的lambda还有一个名为response的参数。这被称为外部的"Shadowing" - ExpressJS。

给他们一个不同的名字,它会起作用:

function search(query, response, callback) {
    request("https://www.google.co.uk", (err, result, body) => {
        if (!err && result.statusCode == 200) {
            return callback("Hello there! "+query, response)