我对前端的响应为空,但在控制台中返回 OK
Empty result in my response to front-end, but in console is returning OK
所以,我有一个 REST API,我想 return 一些数据到我的前端。
所以我有这个代码:
.then(async result => {
// return result.rows
return result.rows.map(async res1 => {
res1.datasProc = [];
const getDatt = await getDatasProcedimentos(res1.GUIA_SENHA);
res1.datasProc.push(...getDatt);
console.log(res1);
return res1;
})
})
第 2 行 return result.rows
,没问题。但是我想用 map 方法在这个对象上添加一些数据。此数据来自第 6 行(SQL 查询)。我已经测试了查询功能及其工作正常。在第 8 行,我的 res1 对象包含我想要的所有数据,但结果是空的。
我的console.log(res1)
{
NM_PESSOA_FISICA: 'name of someone',
NR_CPF: 'document of someone',
GUIA_SENHA: 'id of company',
PROCEDIMENTO: 'procedure of someone in company',
DATA: 'timestamp',
DS_PROCEDIMENTO: 'description of procedure',
datasProc: [
{ 'timestamp1' },
{ 'timestamp2' },
{ 'timestamp3' }
]
} ... and so on
我对前端的回应(使用端点失眠提示)
result = [
{},
{},
{},
{},
{},
{},
// ... and so on
]
我尝试过其他方法,比如将映射结果分配给变量并 returning 那个,但是异步块是先 returning 然后再做映射。
编辑 1:发送数据的控制器在 try-catch 块中:
try {
const guiasPorPeriodo = await guiaDAO.getGuiasPorPeriodo(data_filtro_inicial, data_filtro_final, idClinic);
if (guiasPorPeriodo) {
return res.json({
"resultado": guiasPorPeriodo,
"status": "success",
"message": "enviado com sucesso"
});
} else {
throw new Error('Ocorreu algum erro ao consultar as guias neste período.')
}
} catch (err) {
return res.status(400).json({
"status": "fail",
"error message": `${err.name}: ${err.message}`
});
}
语言:pt-BR
问题出在您的 async/await 地图上。带有 await 的函数将 return 一个承诺,您需要等待承诺得到解决。尝试 Promise.all,应该等到你所有的承诺都得到解决。
.then(async result => {
// return result.rows
return Promise.all(result.rows.map(async res1 => {
res1.datasProc = [];
const getDatt = await getDatasProcedimentos(res1.GUIA_SENHA);
res1.datasProc.push(...getDatt);
console.log(res1);
return res1;
}))
})
另一种方法是使用 for 循环。 async/await.
效果更好
这条语句:
return result.rows.map(async res1 => {
将 return 一个 Promise 数组,而不是结果对象。为确保您的异步函数会 return 实际结果数组,我会尝试这样做:
.then(result => {
// return result.rows
return Promise.all(result.rows.map(async res1 => {
res1.datasProc = [];
const getDatt = await getDatasProcedimentos(res1.GUIA_SENHA);
res1.datasProc.push(...getDatt);
console.log(res1);
return res1;
}))
})
映射器函数声明为异步,因此从技术上讲它 return 是一个承诺。
一个没有被声明为异步但 returns Promise 的函数仍然可以用 await.
调用
所以,我有一个 REST API,我想 return 一些数据到我的前端。
所以我有这个代码:
.then(async result => {
// return result.rows
return result.rows.map(async res1 => {
res1.datasProc = [];
const getDatt = await getDatasProcedimentos(res1.GUIA_SENHA);
res1.datasProc.push(...getDatt);
console.log(res1);
return res1;
})
})
第 2 行 return result.rows
,没问题。但是我想用 map 方法在这个对象上添加一些数据。此数据来自第 6 行(SQL 查询)。我已经测试了查询功能及其工作正常。在第 8 行,我的 res1 对象包含我想要的所有数据,但结果是空的。
我的console.log(res1)
{
NM_PESSOA_FISICA: 'name of someone',
NR_CPF: 'document of someone',
GUIA_SENHA: 'id of company',
PROCEDIMENTO: 'procedure of someone in company',
DATA: 'timestamp',
DS_PROCEDIMENTO: 'description of procedure',
datasProc: [
{ 'timestamp1' },
{ 'timestamp2' },
{ 'timestamp3' }
]
} ... and so on
我对前端的回应(使用端点失眠提示)
result = [
{},
{},
{},
{},
{},
{},
// ... and so on
]
我尝试过其他方法,比如将映射结果分配给变量并 returning 那个,但是异步块是先 returning 然后再做映射。
编辑 1:发送数据的控制器在 try-catch 块中:
try {
const guiasPorPeriodo = await guiaDAO.getGuiasPorPeriodo(data_filtro_inicial, data_filtro_final, idClinic);
if (guiasPorPeriodo) {
return res.json({
"resultado": guiasPorPeriodo,
"status": "success",
"message": "enviado com sucesso"
});
} else {
throw new Error('Ocorreu algum erro ao consultar as guias neste período.')
}
} catch (err) {
return res.status(400).json({
"status": "fail",
"error message": `${err.name}: ${err.message}`
});
}
语言:pt-BR
问题出在您的 async/await 地图上。带有 await 的函数将 return 一个承诺,您需要等待承诺得到解决。尝试 Promise.all,应该等到你所有的承诺都得到解决。
.then(async result => {
// return result.rows
return Promise.all(result.rows.map(async res1 => {
res1.datasProc = [];
const getDatt = await getDatasProcedimentos(res1.GUIA_SENHA);
res1.datasProc.push(...getDatt);
console.log(res1);
return res1;
}))
})
另一种方法是使用 for 循环。 async/await.
效果更好这条语句:
return result.rows.map(async res1 => {
将 return 一个 Promise 数组,而不是结果对象。为确保您的异步函数会 return 实际结果数组,我会尝试这样做:
.then(result => {
// return result.rows
return Promise.all(result.rows.map(async res1 => {
res1.datasProc = [];
const getDatt = await getDatasProcedimentos(res1.GUIA_SENHA);
res1.datasProc.push(...getDatt);
console.log(res1);
return res1;
}))
})
映射器函数声明为异步,因此从技术上讲它 return 是一个承诺。 一个没有被声明为异步但 returns Promise 的函数仍然可以用 await.
调用