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_files
是 asynchronous,您将需要等待承诺解决,然后才能使用该值。您可以将最后一行更改为如下内容:
retrieve_s3_file(to_do_list, guid).then(val => {
response.send(val);
}).catch(error => {
console.log(error)
});
我添加了 .catch
方法,因此您可以优雅地处理与 s3 交互时发生的任何错误。
有人可以向我解释为什么下面的函数在 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_files
是 asynchronous,您将需要等待承诺解决,然后才能使用该值。您可以将最后一行更改为如下内容:
retrieve_s3_file(to_do_list, guid).then(val => {
response.send(val);
}).catch(error => {
console.log(error)
});
我添加了 .catch
方法,因此您可以优雅地处理与 s3 交互时发生的任何错误。