从AJAX请求获取有序响应

时间:2016-01-08 18:33:09

标签: javascript jquery ajax asynchronous google-translate

在此代码中,我发送单词到google翻译for for循环,并尝试将来自google翻译API的翻译后的回复与原始单词配对。但是,我已经开始学习异步和同步之间的区别!

现在的问题是以某种方式继续利用异步AJAX调用的效率,但以某种方式捕获我将它们发送到谷歌翻译的原始顺序的翻译。

    for (word in original_text) {

    $.ajax({
        type: "GET",
        url: "https://www.googleapis.com/language/translate/v2?",
        data: {key: my_Key, source: "en", target: "es", q: original_text[word]},
        dataType: 'json',
        success: function (result, status, xhr) {
            translated.push(result.data.translations[0].translatedText);
            alert(translated);
            if (translated.length === original_text.length) {
                var merged = {};
                for (word in original_text) {
                    merged[original_text[word]] = translated[word];
                }

                dfrd.resolve(JSON.stringify(merged));
            }
        },
        error: function (xhr, status, errorMsg) {
            alert(xhr.status + "::" + xhr.statusText + "::" + xhr.responseText);
        }

    });

1 个答案:

答案 0 :(得分:0)

基本上,Promises.all()允许你这样做:

var promises = [];
for(var i = 0; i < 5; i++){
promises.push($.ajax("SomeURL"));
}
 Promise.all(promises).then(function(datas){
  for(var y = 0; y < datas.length; y++){
    var data = datas[y]; //Your data in correct order   
  }
});

您可以根据自己的情况进行调整。主要想法 - 收集到一个数组然后 - 使用promise.all