我有一个很大的多功能功能:
function trans() {
var credentials = {
clientId: 'TurboFanTrans',
/* Client ID from the registered app */
clientSecret: 'Gkqa2Ru37DeHAfR4AdH/sj94J5Ge1S8Ad7Spp89MMIs=' /* Client Secret from the registered app */
};
translator.detect(credentials, text, detectCb);
function detectCb(err, from) {
if (err) {
sendMain('error', err);
return;
}
translator.translate(credentials, text, from, lang, translateCb);
}
function translateCb(err, translated) {
if (err) {
sendMain('error', err);
return;
}
console.log(text + lang + "=>" + translated);
}
}
假设所有内容都已声明,因为它具有多功能性,我在调用trans()
时出错了,这里是代码片段:
case 'translate':
text += args[1];
lang += args[2];
trans();
text = "";
lang = "";
break;
调用时,由于它全部搞砸了,text
和lang
返回为空字符串(它们最初是)。你们中的任何人都可以帮我解决这个问题吗?无论是在代码中还是在我的大脑中?最终结果应该是text
中任何语言的lang
翻译文本。提前谢谢!
答案 0 :(得分:1)
原因是trans()
立即返回,因为它没有阻塞 - 它执行异步请求。因此text = "";
和lang = "";
会在trans()
的回调之前执行。
一个简单的解决方案是不使用“全局”值,而是传递值:
case 'translate':
text += args[1];
lang += args[2];
trans(text, lang);
text = "";
lang = "";
break;
然后改变:
function trans() {
为:
function trans(text, lang) {
这些局部变量将影响“全局”。