【问题标题】:Nodejs assync function returnNode Js异步函数返回
【发布时间】:2020-06-01 13:29:48
【问题描述】:

我正在尝试获取异步函数的结果,我看到我需要放置“.then”,我看到我有结果,但是当我访问时我无法在函数的返回中显示它路径。但是在 console.log 我有结果。带有结果的 JSON 在承诺提供答案之前加载。

控制台日志

"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 )

};

【问题讨论】:

    标签: javascript node.js json


    【解决方案1】:

    我认为这段代码解决了你的问题,你必须等到每个请求完成

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

    【讨论】:

    • 谢谢,用Promise.all(item).then(data => res.json (data)); 替换return res.json(item),得到了我需要的东西
    猜你喜欢
    • 2019-02-01
    • 2018-05-15
    • 2020-06-25
    • 2018-10-27
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多