• Как получить данные через ajax?

    BRAGA96
    @BRAGA96
    Вот хороший пример на es5, без Promise и async/await если Вам это важно:
    var result = {};
    
    deferredParallel([1, 2, 3, 4, 5], function (id) {
        return $.ajax({
            url: urlToCreated + '/' + id,
            method: 'GET',
            dataType: 'json',
            data: {
                skip: skip,
                limit: 100000
            },
            success: function (data) {
                result[id] = data;
            }
        });
    }).done(function () {
        console.log(result);
    });
    
    function deferredParallel(items, callback) {
        var deferreds = [];
        for (var i = 0; i < items.length; i++) {
            var deferred = callback(items[i], i, items);
            if (typeof deferred === 'object' && deferred.done && deferred.fail) {
                deferreds.push(deferred);
            }
        }
        return $.when.apply(null, deferreds);
    }


    А вот рабочий пример, который вы можете запустить в консоли, например даже тут на тостере:
    var result = [];
    
    deferredParallel([1, 2, 3, 4, 5], function (item) {
        return $.ajax({
            url: 'https://jsonplaceholder.typicode.com/posts/' + item,
            method: 'GET',
            dataType: 'json',
            success: function (data) {
                result.push(data);
            }
        });
    }).done(function () {
        console.log(result);
    });
    
    function deferredParallel(items, callback) {
        var deferreds = [];
        for (var i = 0; i < items.length; i++) {
            var deferred = callback(items[i], i, items);
            if (typeof deferred === 'object' && deferred.done && deferred.fail) {
                deferreds.push(deferred);
            }
        }
        return $.when.apply(null, deferreds);
    }


    Пример выше делал запросы паралельно, в network это выглядит так:
    ▮▮▮▮
    ▮▮▮▮
    ▮▮▮▮
    □□□□□□ READY

    Следующий пример последовательный:
    ▮▮▮
    □□□□□▮▮▮
    □□□□□□□□□□▮▮▮
    □□□□□□□□□□□□□□□ READY
    var result = [];
    
    deferredQueue([1, 2, 3, 4, 5], function (item) {
        return $.ajax({
            url: 'https://jsonplaceholder.typicode.com/posts/' + item,
            method: 'GET',
            dataType: 'json',
            success: function (data) {
                result.push(data);
            }
        });
    }).done(function () {
        console.log(result);
    });
    
    function deferredQueue(items, callback) {
        var ready = $.Deferred();
        ;(function fire (i) {
            var deferred = callback(items[i], i, items);
            if (typeof deferred === 'object' && deferred.done && deferred.fail) {
                deferred.done(function () {
                    items[i + 1] ? fire(++i) : ready.resolve();
                });
            }
        }(0));
        return ready;
    }
    Ответ написан
    2 комментария