Node.js中的多个函数

时间:2014-12-01 23:02:03

标签: javascript node.js function bing-api

我有一个很大的多功能功能:

 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;

调用时,由于它全部搞砸了,textlang返回为空字符串(它们最初是)。你们中的任何人都可以帮我解决这个问题吗?无论是在代码中还是在我的大脑中?最终结果应该是text中任何语言的lang翻译文本。提前谢谢!

1 个答案:

答案 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) {

这些局部变量将影响“全局”。