Методы синхронизации Javascript - PullRequest
0 голосов
/ 16 июля 2009

Я занимаюсь разработкой простого веб-приложения, которое использует API перевода Google для перевода текста на разные языки и затем обратно на первый.

Проблема в том, что когда я вызываю 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 и не знаю, как это можно сделать.

1 Ответ

8 голосов
/ 16 июля 2009

Вместо этого вы можете сделать это функцией, которая будет вызывать себя по завершении

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

Таким образом, следующий перевод будет создан только после обратного вызова из перевода.

edit: Единственное, что вам нужно добавить, это проверить, чтобы увидеть, достигло ли i желаемого значения, чтобы оно не продолжалось вечно (:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...