【发布时间】:2011-10-11 20:26:30
【问题描述】:
我正在尝试编写一个脚本,让我能够快速检查一个单词在被 Google 翻译多次翻译时如何变化。不幸的是,我对 Javascript 不是很有经验,我无法确定我遇到的问题的根源:
function initialize() {
var word = "Hello";
var english = [word];
var german = [];
document.write("1");
var i = 0;
for (i=0; i<10; i++) {
google.language.translate(english[i], 'en', 'de', function(result) {
if (!result.error) {
german.push(result.translation);
document.write(result.translation);
}
else {
document.write(result.error.message);
}
document.write("2");
});
document.write("3");
google.language.translate(german[i], 'de', 'en', function(result) {
if (!result.error) {
english.push( result.translation );
document.write ( result.translation );
}
else {
document.write(result.error.message);
}
document.write("4");
});
document.write("5");
}
}
google.setOnLoadCallback(initialize);
如您所见,对 google.language.translate 的第二次调用将第一次调用的结果作为参数。我希望在运行时在文档中看到类似的内容:
1Hallo23Hello45Hallo23Hello45Hallo23Hello45 ...
相反,我得到 13Hallo2 和崩溃。因为它打印 1 和 3(即它在执行所有第一次调用 translate 之前执行 doc.write("3"))我怀疑某种异步行为正在发生。我使用了按照我编写的顺序执行的代码!帮助!理想情况下,我想知道如何让循环的其余部分仅在第一次调用谷歌翻译返回后执行。
【问题讨论】:
标签: javascript asynchronous concurrency google-translate