我正在尝试获取一个异步函数的结果,我看到我需要放入“ .then”,我看到了我的结果,但是当我访问时,我无法在函数的返回中显示它路径。但是在console.log中,我得到了结果。带有结果的JSON在承诺带来答案之前加载。
console.log
"Cartuchos e Toner > Cartucho Original > LexMark"
"Cartuchos e Toner > Cartucho Original > Epson"
"Games > Acessór. Playstation | PC"
我有退货的例子:
"catName": "79",
"catNamePai": "76",
"nome": "LexMark",
"caminho": {
}
},
{
"catName": "80",
"catNamePai": "76",
"nome": "Epson",
"caminho": {
}
},
{
"catName": "81",
"catNamePai": "73",
"nome": "Acessór. Playstation | PC",
"caminho": {
}
我期望的回报示例:
"catName": "79",
"catNamePai": "76",
"nome": "LexMark",
"caminho": "Cartuchos e Toner > Cartucho Original > LexMark"
},
{
"catName": "80",
"catNamePai": "76",
"nome": "Epson",
"caminho": "Cartuchos e Toner > Cartucho Original > Epson"
},
{
"catName": "81",
"catNamePai": "73",
"nome": "Acessór. Playstation | PC",
"caminho": Games > Acessór. Playstation | PC"
我的代码
const trataDadosCatDigitoComCaminho = async (req, res) => {
const string = dados;
const separaLinha = string.split(/\n/)
const item = separaLinha.map(item => {
async function pegaCaminho(id){
const response = await api.get(`/tratadadoscatdigito/caminho/${id}`)
.then(function (response) {
// handle success
//console.log(response.data);
return response.data
})
.catch(function (error) {
// handle error
console.log(error);
});
return await response;
}
const catName = item.match(/^\d+/)[0].trim()
const catNamePai = item.match(/\t\d+/)[0].trim()
const nome = item.match(/\t[A-Za-záàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ ].+/)[0].trim()
var caminho = pegaCaminho(catName).then(async res => {
console.log(res)
return await res;
})
const produto = { catName, catNamePai, nome, caminho}
return produto
});
return await res.json( item )
};
答案 0 :(得分:0)
我认为这段代码可以解决您的问题,您必须等待每个请求完成
function pegaCaminho(id) {
return new Promise((resolve,reject)=>{
api.get(`/tratadadoscatdigito/caminho/${id}`)
.then(function (response) {
// handle success
//console.log(response.data);
resolve(response.data)
})
.catch(function (error) {
console.log(error);
reject(error)
});
})
}
const trataDadosCatDigitoComCaminho = async (req, res) => {
const string = dados;
const separaLinha = string.split(/\n/)
// you have to add async to each item
const item = await separaLinha.map(async (item) => {
const catName = item.match(/^\d+/)[0].trim()
const catNamePai = item.match(/\t\d+/)[0].trim()
const nome = item.match(/\t[A-Za-záàâãéèêíïóôõöúçñÁÀÂÃÉÈÍÏÓÔÕÖÚÇÑ ].+/)[0].trim()
try{
var caminho = await pegaCaminho(catName);
}catch(error){
var caminho = null;
}
return { catName, catNamePai, nome, caminho }
});
return res.json(item)
};