Обращаться с 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>