2

Voici mon code J'essaie de traduire mon texte en allemand et de l'attribuer à la variable après la traduction, mais en obtenant la chaîne vide pouvez-vous s'il vous plaît m'aider et me dire quelle erreur je fais tout en l'exécution du code ci-dessous.impossible d'assigner une variable en JavaScript

S'il vous plaît coder mon code s'il est faux et me fournir la solution de correction de sorte qu'après l'exécution du translatedString devrait avoir le résultat comme « Hallo ich liebe deutsche Sprache »

Je veux utiliser translatedString en dehors de la fonction de traduction de sorte que le résultat soit global

// working with string translation 

const translate = require('google-translate-api'); 

var myString = "Hello I love German language"; 

console.log("My String is "+ myString); 
// result is My String is Hello I love German language 

var translatedString = translate(myString, {to: 'de'}) 
     .then(res => {translatedString = res.text}); 

console.log("Translated String is "+ JSON.stringify(translatedString)); 
// result is Translated String is {} 
// expected result is Translated String is Hallo ich liebe deutsche Sprache 

Répondre

3

Traduit de l'anglais par Google Translate. Une promesse représente une valeur éventuelle; la traduction ne sera pas disponible immédiatement. Si vous souhaitez interagir avec la valeur éventuelle, vous devez placer votre code dans la méthode .then de la promesse.

const translate = require('google-translate-api'); 

let myString = "Hello I love German language"; 
console.log("My String is "+ myString); 

let promise = translate(myString, {to: 'de'}).then(res => { 
    return res.text; 
}); 

promise.then(translatedString => { 
    console.log("Translated String is "+ JSON.stringify(translatedString)); 
}); 

console.log('The translation has started, but it isn\'t ready yet'); 

EDIT: Comme l'a demandé, voici une version qui enregistre à une variable. Ce n'est pas ce que je recommande:

const translate = require('google-translate-api'); 

let myString = "Hello I love German language"; 
console.log("My String is "+ myString); 

let translatedString = null; 
let promise = translate(myString, {to: 'de'}).then(res => { 
    translatedString = res.text; 
}); 

promise.then(() => { 
    console.log("Translated String is "+ JSON.stringify(translatedString)); 
}); 
+0

Je veux utiliser translatedString en dehors de la fonction de traduction de sorte que la résultat shout be global –

+0

Il est impossible que la fonction translatedString soit disponible avant que la promesse ne se résolve. Pour attendre la promesse de résolution, vous mettez votre code dans le bloc .then. Tout code que vous mettez * en dehors du bloc .then n'attendra pas la promesse, et ne peut donc pas avoir la chaîne translatedString. –

+0

est-il possible de faire le code ou refactor le code d'attendre jusqu'à ce que translatedString est prêt, puis lui assigner afin que je puisse l'utiliser en dehors de la fonction de traduction et d'utiliser globalement –

0

Parce que vous connectez la variable avant de recevoir le résultat alors que vous devez vous connecter quand la promesse est résolu:

translate(myString, {to: 'de'}).then(res => { 
    console.log(res.text); //Hallo ich liebe deutsche Sprache 
}); 
0

Le dernier appel console.log() est en dehors de la Promise chaîne. Vous pouvez utiliser .then() pour return la valeur Promise à côté .then() dans Promise chaîne ou async/await pour obtenir la valeur de la Promise à la ligne suivante dans une fonction async

const translatePhrase = async(myString) => { 

    const translate = require('google-translate-api'); 

    // working with string translation 

    console.log("My String is "+ myString); 
    // result is My String is Hello I love German language 

    const translatedString = await translate(myString, {to: 'de'}).then(res => res.text); 

    console.log("Translated String is "+ JSON.stringify(translatedString)); 

} 

translatePhrase("Hello I love German language");