【问题标题】:Javascript synchronization methodsJavascript同步方法
【发布时间】:2010-11-11 06:45:47
【问题描述】:

我正在开发一个简单的网络应用程序,它使用 Google 翻译 API 将文本翻译成不同的语言,然后再翻译回第一种语言。

问题是,当我调用 google.language.translate(...) 时,指定了一个回调函数,该函数会更新我页面中的文本区域。这里:

while (i < translationNumber) {
  google.language.translate(testua, languages[i] , languages[i+1],
  function(result) {
    if (result.translation) {
      text = result.translation;
      f.textarea1.value = text;
    }
  });

  alert('You must not close this until translation is done');
  i++;
}

如您所见,需要警报才能手动等待翻译结束,以便按照我的语言数组的顺序正确翻译,否则多个翻译调用处于待处理状态并且顺序中断。如果我可以在 java 或 C 中使用某种信号量,那就太好了,但是我是 Javascript 的新手,我不知道如何做到这一点。

【问题讨论】:

  • 是否要根据数组顺序更新文本区域?
  • 我想删除该警报并使 google translate 函数调用阻塞或同步,以便连续完成翻译,否则它执行循环,然后我收到翻译但不是顺序的,只是将原文翻译成不同的语言。

标签: javascript api synchronization


【解决方案1】:

您可以改为将其设为在完成时将调用自身的函数

function translate(i) {
  google.language.translate(testua, languages[i], languages[i+1], function(result) {
    if (result.translation) {
      text = result.translation;
      f.textarea1.value = text;
      if (i < translationNumber) { translate(i++); }
    }
  }
}

这样,下一次翻译只会在翻译回调后实例化。

编辑:您唯一需要添加的是检查i 是否已达到所需值,因此它不会永远持续下去(:

【讨论】:

    猜你喜欢
    • 2013-05-14
    • 1970-01-01
    • 2013-10-26
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    相关资源
    最近更新 更多