简体   繁体   English

Node.js中的多种功能

[英]Multiple functions in Node.js

I have this one big multi-functional function: 我有一个重要的多功能功能:

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

    }

Assume everything is declared, since its multifunctional, I am doing something wrong when I am calling trans() here is the code snippet: 假设所有内容都已声明,因为它是多功能的,因此在我调用trans()时出现了错误,这是代码段:

case 'translate':
                        text += args[1];
                        lang += args[2];
                        trans();
                        text = "";
                        lang = "";
                        break;

When called, since its all messed up, text and lang return as empty strings(they are originally). 当被调用时,由于所有内容都弄乱了,所以textlang返回为空字符串(它们原本是)。 Can anyone of you guys help me sort this out whether in code or in my brain? 你们中的任何人都可以在代码或大脑中帮助我解决此问题吗? the end result should be the translated text of text in the language of anything in lang . 最终结果应该是lang中任何语言的text翻译文本。 Thank in advance! 预先感谢!

The reason is that trans() returns immediately because it does not block -- it performs an asynchronous request. 原因是trans()立即返回,因为它没有阻塞-它执行异步请求。 So text = ""; 所以text = ""; and lang = ""; lang = ""; are executed before your callbacks in trans() . trans()回调之前执行。

An easy solution to this is to not use the "global" values and pass in the values instead: 一个简单的解决方案是不使用“全局”值,而传入这些值:

case 'translate':
  text += args[1];
  lang += args[2];
  trans(text, lang);
  text = "";
  lang = "";
break;

Then change: 然后更改:

function trans() {

to: 至:

function trans(text, lang) {

These local variables will then shadow the "globals." 然后,这些局部变量将遮盖“全局变量”。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM