Node.js Response.send 在函数完成之前不返回任何数据

Node.js Response.send returning no data before function finishes

有人可以向我解释为什么下面的函数在 retrieve_s3_file() 完成之前返回吗?

客户端没有收到来自下方response.send的数据。从 retrieve_s3_file() 返回的数据是正确的(基于控制台输出),但是首先将没有数据的响应发送回客户端。

app.post("/getJobStatus", function(request, response){
    var guid = request.body.job_id;
    var to_do_list = [];
    var data_list = [];
    var completed_list = [];

axios.get(job_queue_url + "/list?guid=" + guid)
        .then(function (res){
          console.log("Response from API gateway : ");
          console.log(res.data);
          files = res.data;
          for (let i = 0; i < files.length; i++)
          {
            if (files[i] in completed_list) {continue}
            else {
              to_do_list.push(files[i]);
              completed_list.push(files[i]);
            }
          }
          response.send(retrieve_s3_file(to_do_list, guid));
        })
        .catch(function (error){
          console.log(error);
        });

如果 retrieve_s3_filesasynchronous,您将需要等待承诺解决,然后才能使用该值。您可以将最后一行更改为如下内容:

retrieve_s3_file(to_do_list, guid).then(val => {
    response.send(val);
}).catch(error => {
    console.log(error)
});

我添加了 .catch 方法,因此您可以优雅地处理与 s3 交互时发生的任何错误。