2016-07-07 74 views
0

我剛開始考慮es6-promises,我在繞過它時遇到了麻煩。在我的應用程序中,我試圖通過ajax調用返回數據並繼續循環,直到找不到更多數據(實際上是分頁)。使用承諾循環使用ajax功能

這裏是AJAX調用,它返回一個承諾對象:

function getDeals(start, url) { 
    return Promise.resolve($.ajax({ 
     type: 'GET', 
     url: url, 
     data: { start: start }, 
     global: false, 
     success: function() {}, 
     error: function() {} 
    })); 
} 

這裏是包含功能:

var start = 0; 

getDeals(start, url).then(function (data) { 
    // The call returns a more data flag if there are more records 
    moreData = data.moreData; 
    start = data.records.count; 
}).then(function() { 
    if (moreData) { 
     // Here is where I want to continue calling the function 
     // until no more records are found 
     getDeals(start, url); 
    } 
}); 

每個調用返回100條記錄,所以我需要繼續循環通過,直到moreData標誌是錯誤的。另外,不確定承諾方法是否是最有效的方法。

+0

如果你是在服務器端方法的控制,你可以改變MOREDATA以總價然後,而不是等待每個調用來完成,你可以產生多個請求,但你將不得不開始追蹤並增加一點複雜性。 –

回答

3

$ .ajax已經爲您返回了一個承諾,因此您不需要創建另一個承諾,只需傳入想要運行的成功和失敗功能即可。

function getDeals(start, url, success, error) { 
    $.ajax({ 
     type: 'GET', 
     url: url, 
     data: { start: start }, 
     global: false, 
     success: success, 
     error: error 
    }); 
} 

,並調用它

var start = 0; 

getDeals(start, url, success); 

function success (data) { 
    // The call returns a more data flag if there are more records 
    moreData = data.moreData; 
    start = data.records.count; 
    if (moreData) { 
    // Here is where I want to continue calling the function 
      // until no more records are found 
     getDeals(start, url, success); 
    } 
}