2015-09-23 77 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是的,'首先開始第一個結束,第二個開始 - 第二個結束'但沒有回調,如何使它與延遲 – 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'); 
    }) 
; 

小提琴:http://jsfiddle.net/saj5stt9/

+0

,但這不允許同時調用,而正確使用'$ .when'。 http://jsfiddle.net/dr3w9byk/ – charlietfl

+0

OP特別要求串行執行「如何使$ .Deferred工作一步一步?」。如果承諾取決於先前調用的結果,那麼這是一個有效的用例。 –

+0

好吧...我解釋爲想要的結果順序,因爲這是它是如何設置在'$ .when' – charlietfl