2015-09-23 9 views
0

Вот тестовый код:

var dfd_1 = $.Deferred(), 
    dfd_2 = $.Deferred(), 
    dfd_3 = $.Deferred(); 

function test(content, waitTime, dfd) { 
    console.log(content + ' begin'); 
    setTimeout(function() { 
     console.log(content + ' end'); 
     dfd.resolve(); 
    }, waitTime); 
    return dfd.promise(); 
} 

$.when(test('first', 2000, dfd_1), test('second', 4000, dfd_2), test('third', 6000, dfd_3)) 
.then(function() { 
    console.log('all done'); 
}); 

В результате из консоли: начинается

first begin 
second begin 
third begin 

first end 
second end 
third end 

all done 

3 функции и после того, как шаг за шагом заканчивается Но я необходимо привести, как это (начало конца, начало конца ...):

first begin 
first end 

second begin 
second end 

third begin 
third end 

all done 

Как сделать $ .Deferred работа шаг за шагом? помочь мне, пожалуйста, с решением

+0

Вы хотите стоять в очереди на исполнение? – andlrc

+0

@ dev-null yes, 'first start first end, second start - второй end', но без обратных вызовов, как сделать это с Deferred – bsbak

ответ

0

Использование then():

test('first', 2000, dfd_1) 
    .then(function() { 
     return test('second', 4000, dfd_2); 
    }) 
    .then(function() { 
     return test('third', 6000, dfd_3); 
    }) 
    .then(function() { 
     console.log('all done'); 
    }) 
; 

Fiddle: http://jsfiddle.net/saj5stt9/

+0

, но это не позволяет одновременные вызовы, тогда как правильное использование' $ .when' делает. http://jsfiddle.net/dr3w9byk/ – charlietfl

+0

OP специально требует серийного исполнения «Как сделать шаг $ .Deferred шаг за шагом?». И это допустимый прецедент, если обещания зависят от результатов предыдущих вызовов. –

+0

ok ... я интерпретировал как желаемые результаты в порядке, так как именно так он был создан в '$ .when' – charlietfl

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