2015-11-21 129 views
0

我很難與jQuery的deferred.promise。什麼是正確的方法來做到這一點?如何讓deferred.promise正常工作?

JS

var init = function() { 
    var getItems = getJson.getItemData; 
    //Some other code that will use getItems 
} 

var getJson = function() { 
    return{ 
    getItemData: function(){ 
     var deferred = $.Deferred(); 
     $.get('itemData.json').success(function(response){ 
     deferred.resolve(response); 
     }); 
     return deferred.promise; 
    } 
    } 
}; 

這將返回undefined。這就是我在角度上做類似工作的方法,但是沒有用jQuery做到這一點。有沒有辦法做到這一點與jQuery?

+1

你不需要遞延,簡單地返回$不用彷徨 –

+0

它是一個錯字?你想做'getItems = getJson.getListData'嗎?和'getItems'是一個函數,所以你需要調用它來獲得承諾? –

+0

對不起。如果我把它作爲一個函數調用,它返回getJson.getItemData不是一個函數 – Chipe

回答

1

這裏的歸結爲最小碼所有的貼碼所需

var init = function() { 
    $.get('itemData.json').then(function(getItems) { 
     // here getItems is closer to what you want it to be 
     //Some other code that will use getItems 
    }); 
} 

剩下的就是不必要的克魯夫特

+0

所以我嘗試這種方式並獲得'Object {readyState:1}'當我打開那個對象時有'responseJSON'但是'console.log(getItems.responseJSON)'給出了undefined – Chipe

+0

讀取了我在代碼中放入的註釋getItems將會(如果你的代碼被糾正了,它會是什麼樣子)......我也在你的問題的評論中預測到了這一點......爲了得到一個承諾的價值,使用它的'.then' –

+0

看到編輯答案 - 你需要弄清楚getItems在那個時候是什麼,我無法知道 –