JavaScript 同步方法

标签 javascript api synchronization

我正在开发一个简单的网络应用程序,它使用 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 的新手,我不知道如何做到这一点。

最佳答案

您可以将其设为一个函数,该函数将在完成时调用自身

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是否达到了所需的值,所以它不会永远持续下去( :

关于JavaScript 同步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1135988/

相关文章:

php - Google API PHP 客户端 - 通讯录服务

python - 调用包含 API 调用的类和函数时没有返回值

javascript - 如何使用Django将表中的数据保存到数据库?

Javascript 不会设置在 XHR 响应中收到的 httpcookie

javascript - 如何禁用表的子元素中的输入

java - 线程同步相关问题

syntax - 需要帮助来了解android.volley.requestQueue文档示例的语法

javascript - jQuery绑定(bind)点击不添加元素

c++ - 工厂模式的 API 设计缺陷

Java 同步方法 - OCPJP