Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

130
Visualizações
Callback con funciones recursivas

Estoy usando la API de traducción de Google para traducir datos de un archivo json a una configuración regional francesa y luego volver a escribirlos en un archivo. Estoy usando una función recursiva para iterar sobre el archivo json ya que está profundamente anidado. Sin embargo, la ejecución no espera hasta que se complete la traducción antes de escribir en el archivo. Intenté usar enfoques de devolución de llamada y promesa, pero no pude hacerlo bien.

Solo para que funcione, ya que requería una salida como una emergencia, configuré un tiempo de espera antes de que se llame al método de escritura. Funciona, pero me gustaría aprender el enfoque apropiado/correcto para implementar esto.

 const fs = require('fs') const {Translate} = require('@google-cloud/translate').v2 require('dotenv').config() process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0 const credentials = JSON.parse(process.env.credentials) const translate = new Translate({ credentials, projectId: credentials.project_id, }) let data = {} // writeJSONTofile should be executed only after readJSONFile execution is completed //read file const readJSONFile = () => { try { data = JSON.parse(fs.readFileSync('...\\locale\\en.json')) iterateAndTranslate(data) setTimeout(() => { writeJSONToFile() }, 25000) } catch (error) { console.log(error) } } // iterate, translate, reassign const iterateAndTranslate = async (data) => { for(key in data) { if (typeof data[key] === 'object' && data[key] !== null) { iterateAndTranslate(data[key]) } else{ data[key] = await translateText(data[key], 'fr') } } } //translate method const translateText = async (text, targetLanguage) => { try { let [response] = await translate.translate(text, targetLanguage) return response } catch (error) { console.log(error) return 0 } } const writeJSONToFile = async () => { var outputFileName = 'C:\\test\\test.json' await fs.writeFileSync(outputFileName, JSON.stringify(data,null,4), (err) => { if(err) { console.log(err) } else { console.log('Done!') } }) } // start from here readJSONFile()
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Tienes algunos problemas con tu código.

  • Sus funciones usan una global variable y la mutan en lugar de obtener una entrada y devolver una salida.
  • timeout causará un comportamiento inesperado en su caso.
  • estas usando var
  • tiene async-await await redundante en la función writeJSONToFile

Vea mi punto de vista sobre la posible solución.

 const fs = require("fs"); const { Translate } = require("@google-cloud/translate").v2; require("dotenv").config(); process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; const credentials = JSON.parse(process.env.credentials); const translate = new Translate({ credentials, projectId: credentials.project_id, }); // writeJSONTofile should be executed only after readJSONFile execution is completed //read file const readJSONFile = async () => { try { const data = JSON.parse(fs.readFileSync("...\\locale\\en.json")); return iterateAndTranslate(data); } catch (error) { console.log(error); } return {}; }; // iterate, translate, reassign const iterateAndTranslate = async (data) => { for (let key in data) { if (typeof data[key] === "object" && data[key] !== null) { await iterateAndTranslate(data[key]); } else { data[key] = await translateText(data[key], "fr"); } } return data; }; //translate method const translateText = async (text, targetLanguage) => { try { let [response] = await translate.translate(text, targetLanguage); return response; } catch (error) { console.log(error); } return null; }; const writeJSONToFile = (data) => { let outputFileName = "C:\\test\\test.json"; fs.writeFileSync(outputFileName, JSON.stringify(data, null, 4), (err) => { if (err) { console.log(err); } else { console.log("Done!"); } }); }; // start from here const run = async () => { const data = await readJSONFile(); writeJSONToFile(data); }; run();

Ver más:

  • ¿Por qué no usar la variable global?
  • por qué no usar var
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda