2013-03-05 27 views
1

我想跟隨一些JavaScript課程,其中有一個延遲實現。 這是代碼延遲對象內部的回調函數

getData = function (options) { 
    return $.Deferred(function (def) { 

    var results = options.results;      

    getFunction({ 
     success: function (smt) {         
     results("test"); 
     def.resolve(results); 
     debugger; 
     }, 
     error: function (response) {          
     def.reject(); 
     } 
    }); 

    }).promise(); 
}, 

的核心現在的問題是..當我調用這個函數來自外部,如:

$.when(somthing.getData(options)). 
    done(alert(options.results)); 

debugger; 

它發生,首先到達$。當外呼調試器,然後觸摸裏面的延遲對象內部回調SUCCESS函數...

我不明白它..不應該只有在達到def.resolve(結果)時承諾?...

回答

0

一切是正確的,除了最後一行:

$.when(somthing.getData(options)).done(alert(options.results)); 
debugger; 

你叫alert(和debugger)立刻在這裏。你需要的是一個回調傳遞給done是這樣的:

$.when(somthing.getData(options)) 
.done(function(){ 
    alert(options.results); 
    debugger; 
}); 
+0

感謝畸形..這就像一個魅力的工作。我能問你爲什麼..我認爲,內部完成的功能已經是一個回調函數...爲什麼我必須定義一個函數來調用我的函數? – 2013-03-05 10:08:04

+0

'.done'接受函數。你傳遞給'.done'的函數不是函數,而是調用alert()的結果(注意命令:first alert被調用,然後它的結果被傳遞給'.done'),這是未定義的(這就是警報返回)。這就像做'.done(「test」)'。這是什麼意思? JavaScript應該如何處理字符串?你想將一個函數傳遞給'.done',所以JavaScript會知道:「哦,我收到了一個函數,我可以在'完成時'調用它。 – freakish 2013-03-05 10:15:01

+0

晶瑩剔透:) – 2013-03-05 11:02:11