2015-08-03 42 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

你是对的,我已经更新了我的答案 –