2015-08-03 45 views
0

我正在按角度順序執行多個ajax調用。我想實現的工作與$.ajax工作正常,但是當我使用角度實現時,我正在使用$http作爲服務器請求,它不起作用。我想知道,這兩個都返回承諾對象,然後爲什麼它不能正常工作。在基於數組角色的角度上承諾多個ajax請求

使用$就

shoppingList.split(",").reduce(function(resultPromise, shoppingItem) { 

    return resultPromise.then(function(result) { 
     pro = $.ajax('/items/'+shoppingItem); 
     return pro.then(function(res) { 
      console.log(result); 
      result.push(new Item(res.label,res.price)); 
      return result; 
     }); 
    }); 
}, $.when([])).then(completeCallback); 

見工作小提琴 - JSFiddle

採用了棱角分明的$ HTTP

function fetchDataDayWise(dateRanges,completeCallback) { 
     return dateRanges.reduce(function(resultPromise, dt) { 
      return resultPromise.then(function(resultData) { 
       machinePromise = getData(); 
       return machinePromise.then(function(data) { 
        if(data && data.length > 0) 
        { 
         resultData = resultData.concat(data); 
        } 
        console.log(resultData); 
        return resultData; 
       }); 
      }); 
     }, $.when([])).then(completeCallback); 
    } 

    var dateRanges = [1,2,3,4] 

    function setData(data) { 
     console.log("data",arguments); 

    } 
    fetchDataDayWise(dateRanges,setData); 

Plunkr

您可以在控制檯中看到。在JSFiddle中,您將在Angular plunkr中獲取數組項,並返回對象。我猜這是諾言對象。

任何幫助,將不勝感激。

+1

始終在SO上發佈相關代碼。這不是來自有經驗的用戶的期望。 – Satpal

+0

@Satpal對不起,我只是稍微修改了一下。 –

+0

同意以上 - 我看到這越來越多,並忽略越來越多的問題... –

回答

0

我已付出你的plnkr希望這將有助於

http://plnkr.co/edit/VWJMNU?p=preview

function fetchDataDayWise(dateRanges, compleCallback) { 
     var arrPromise = []; 

     dateRanges.reduce(function (dt) { 
     arrPromise.push(getData()); 
     }); 

     $q.all(arrPromise).then(compleCallback); 
    } 
+0

這將工作,但我希望按順序服務器調用不是一次。我希望在獲取數據後儘快更新UI,並且其他調用將同時運行。 –

+0

你不希望所有的請求在渲染UI之前復出儘快單個請求到來你想要渲染UI ..我是對嗎? – dhavalcengg

+0

我已經更新了我的plnkr .. – dhavalcengg

1

在你的服務,你用$ http.get,這將返回一個承諾這是你所看到的物體,讓你的從它的值,你需要有(你的情況):

deferred.resolve(data.data); 

,而不是

deferred.resolve(data); 

希望這會有所幫助。如果您還有其他問題,我會很樂意回答。

更新:

這不是你的代碼完全相同,但它會給你的如何實現連續通話的例子。

var prevPromise = $q.resolve(); prevPromise = prevPromise.then(function() { this.someValue= value; //array of databases containing queryresults return this.function(req, res); }.bind(this));

+0

那麼,在角度服務,你可以看到我只綁定成功的方法,所以數據將工作。在使用$ http的.then方法的情況下,我需要有data.data。儘管如此,我仍然嘗試使用data.data,但它不工作。 –

+0

你是對的,我已經更新了我的答案 –