如何在JavaScript中分配变量

如何在JavaScript中分配变量,javascript,node.js,ecmascript-6,es6-promise,google-translate,Javascript,Node.js,Ecmascript 6,Es6 Promise,Google Translate,下面是我的代码。我试图将文本翻译成德语,并在翻译后分配给变量,但得到的是空字符串。执行下面的代码时我犯了什么错误 我正在寻求更正,以便在执行translatedString后,应该有一个“Hallo ich liebe deutsche Sprache”的结果 我想在translate函数之外使用translatedString,这样结果应该是全局的: // working with string translation const translate = require('google-tr

下面是我的代码。我试图将文本翻译成德语,并在翻译后分配给变量,但得到的是空字符串。执行下面的代码时我犯了什么错误

我正在寻求更正,以便在执行
translatedString
后,应该有一个“Hallo ich liebe deutsche Sprache”的结果


我想在translate函数之外使用translatedString,这样结果应该是全局的:

// 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

翻译是回报承诺。承诺代表最终的价值;翻译将无法立即提供。如果希望与最终值交互,则需要将代码放入承诺的
。然后
方法中

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');
编辑:根据要求,这里有一个将其保存到变量的版本。这不是我的建议:

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

因为您在收到结果之前记录变量,而在承诺得到解决时应该记录变量:

translate(myString,  {to: 'de'}).then(res => {
   console.log(res.text); //Hallo ich liebe deutsche Sprache
});
最后一个
console.log()
调用在
Promise
链之外。您可以使用
.then()
承诺
值返回到下一个
。然后在
承诺
链中使用
异步/等待
获取
异步
函数下一行的
承诺

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

我想在translate函数之外使用translatedString,这样在promise解析之前,translatedString不可能在globalIt中可用。要等待承诺得到解决,请将代码放入.then块。您放在.then块之外的任何代码都不会等待承诺,因此无法拥有translatedString。是否有任何可能的方法使代码或重构代码等待translatedString就绪,然后分配给它,以便我可以在translate函数之外使用它,并作为全局使用如果您想等待,你必须使用。然后。当您在内部时,可以将其分配给某个全局变量。然后。但是,任何其他想要使用该全局变量的代码都需要使用。然后,为了等待,或者该代码需要理解该值可能还不存在。请重构相同的代码,以便我在中分配全局变量。然后,在函数外部使用相同的代码。如果你能帮助我,我将非常感谢你