Обращаться с AJAX лучше с обещаниями?

У меня есть вложенный AJAX-вызов, где каждый уровень должен ждать завершения предыдущего, прежде чем выполнять. Я использую обещания, но я не понимаю, как это может помочь в следующей ситуации.

var me = this;

initA()
    .done(function () {
        initB.apply(me, arguments)
            .done(function () {
                initC.apply(me, arguments)
                    .done(function () {
                        initD.apply(me, arguments)
                    });
            });
    });

Есть ли лучший способ сделать это вышеупомянутым вложением?

1 ответ

Решение

Использовать then метод и до тех пор, пока ваша функция возвращает обещание, библиотека обещаний будет пытаться разрешить возвращенное обещание, прежде чем перейти к следующему. then Перезвоните. С этим вы можете просто сделать bind вместо apply,

В приведенном ниже примере я использую отложенные объекты jQuery, но я считаю, что это должно быть одинаковым для большинства библиотек обещаний

var me = {something:"world"};

function dotimeOut(){
    console.log(this);
    var def = jQuery.Deferred();
    setTimeout(function(){
      def.resolve(1);
    },1000);
    return def.promise();
}

dotimeOut()
.then(dotimeOut.bind(me))
.then(dotimeOut.bind(me))
.then(dotimeOut.bind(me));

/* This is the same as doing the below 
    initA()
    .then(function(){
        return initB.apply(me,arguments);
    })
    .then(function(){
        return initC.apply(me,arguments);
    })
    .then(function(){
        return initD.apply(me,arguments);
    }) 
*/
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

Другие вопросы по тегам