Node.js异步函数返回

时间:2020-02-17 15:17:59

标签: javascript node.js json

我正在尝试获取一个异步函数的结果,我看到我需要放入“ .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 )

};

1 个答案:

答案 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)
};