2016-03-19 2 views
0

У меня есть 3 массива по 10 URL-адресов.Выполнение групп ajax запросов один за другим

Что я хочу:

Сначала все Аякса запросы адресов в первом массиве получить казнены.

Затем Аякс запросы второго URLs массива получить выполнен

и в последнем запрашивает третий массив ursl получить казнен.

ответ

0

Вы можете использовать обещания (ES6) для очереди ваших запросов и продолжить, как только очередь будет очищена.

var array1 = ['url1', 'url2', 'url3']; 
var array2 = ['url1', 'url2', 'url3', 'url4']; 
var array3 = ['url1', 'url2']; 

function createPromiseArray(list){ 
    return new Promise(function(resolve, reject){ 
     var queue = []; 
     for(var i=0; list.length > i; i++){ 
      queue.push(doRequest(list[i])); 
     } 
     Promise.all(queue).then(function(){ 
      resolve(); 
     }); 
    } 
} 

function doRequest(url){ 
    return new Promise(function(resolve, reject){ 
     // do ajax request 
     if (!error) { 
      resolve(data); 
     }else{ 
      reject(data); 
     } 
    } 
} 

createPromiseArray(array1) 
    .then(function(){ 
     createPromiseArray(array2); 
    }) 
    .then(function(){ 
     createPromiseArray(array3); 
    }) 
    .then(function(){ 
     console.log('all done'); 
    }) 

подробнее на обещаниях можно найти здесь https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise

Вы также, возможно, потребуется использовать polyfill для старых браузеров, которые вы можете найти здесь https://www.promisejs.org/

+0

это woked до некоторой степени. В нем говорится, что «ошибка не определена» –

+0

это просто пример, который должен исходить от вашего вызова ajax. Когда ваш вызов ajax возвращает ошибку, добавьте что-то вроде 'var error = data.error;' Это определит переменную ошибки. В зависимости от того, будет ли оно истинным или ложным, будет определено обещание, разрешающее или отклоняемое. – AVDW

+0

Я не понял отклонение и разрешение, а также данные параметров и ошибки. –

Смежные вопросы