Использование конструктора черт

В качестве простой альтернативы, которая не требует $.when.apply или array, вы можете использовать следующий шаблон для создания единого обещания для нескольких параллельных обещаний:

promise = $.when(promise, anotherPromise);

, например

function GetSomeDeferredStuff() {
    // Start with an empty resolved promise (or undefined does the same!)
    var promise;
    var i = 1;
    for (i = 1; i <= 5; i++) {
        var count = i;

        promise = $.when(promise,
        $.ajax({
            type: "POST",
            url: '/echo/html/',
            data: {
                html: "<p>Task #" + count + " complete.",
                delay: count / 2
            },
            success: function (data) {
                $("div").append(data);
            }
        }));
    }
    return promise;
}

$(function () {
    $("a").click(function () {
        var promise = GetSomeDeferredStuff();
        promise.then(function () {
            $("div").append("<p>All done!</p>");
        });
    });
});

Примечания:

  • Я понял это, увидев, что кто-то цепочки обещает последовательно, используя promise = promise.then(newpromise)
  • Недостатком является то, что он создает дополнительное обещание объекты за кулисами и любые параметры, переданные в конце, не очень полезны (поскольку они вложены внутри дополнительных объектов). Для того, что вам нужно, хотя оно короткое и простое.
  • Поверхность - это не требует управления массивами или массивами.
0
задан kosemMG 15 January 2019 в 23:04
поделиться