如何在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函数之外使用它,并作为全局使用如果您想等待,你必须使用。然后。当您在内部时,可以将其分配给某个全局变量。然后。但是,任何其他想要使用该全局变量的代码都需要使用。然后,为了等待,或者该代码需要理解该值可能还不存在。请重构相同的代码,以便我在中分配全局变量。然后,在函数外部使用相同的代码。如果你能帮助我,我将非常感谢你