AngularJS同步调用

时间:2016-01-10 20:09:38

标签: angularjs http

在容易理解的伪代码中,我在AngluarJS中有这个。当我们有c时,它应该做a或b或两者。我现在遇到的问题是调用异步调用,我的数据搞砸了。

import pandas as pd
import numpy as np

d = {'year' : [2000, 2000, 2000, 2000, 2001, 2001, 2001],
 'home': ['A', 'B', 'B', 'A', 'B', 'A', 'A'],
 'away': ['B', 'A', 'A', 'B', 'A', 'B', 'B'],
 'aw': [1, 0, 0, 0, 1, 0, np.nan],
 'hw': [0, 1, 0, 1, 0, 1, np.nan]}

df = pd.DataFrame(d, columns=['home', 'away', 'hw', 'aw'])
df.index = range(1, len(df) + 1)
df.index.name = 'game'

df = df.set_index(['hw', 'aw'], append=True).stack().reset_index().rename(columns={'level_3': 'role', 0: 'team'}).loc[:,
 ['game', 'team', 'role', 'hw', 'aw']]

def wins(row):
    if row['role'] == 'home':
        return row['hw']
    else:
        return row['aw']
df['wins'] = df.apply(wins, axis=1)

df['expanding_mean'] = df.groupby('team')['wins'].apply(lambda x: pd.expanding_mean(x).shift())

print df

如您所见,由于if语句,我无法将第二个GET放入第一个调用的.succes方法中。 我可以摆弄一个第二个听的功能,但我认为应该有一个合适的方法来做到这一点。

3 个答案:

答案 0 :(得分:2)

您可以保留promise对象,该对象可能会从第一个a || c检查ajax返回。如果满意/不满意$q.when将通过检查promise值来解决承诺。

使用$q.when背后的原因是如果未定义承诺,那么.then $q.when函数将解决承诺。 Example Fiddle

如果promise有承诺对象,那么它将等到该承诺得到解决。

<强>代码

var promise;
if(a || c) {
    promise = $http.get("path1");
}
$q.when(promise).then(function(response){
    if(b || c) {
       promise = $http.get("path2");
     }
}, function(error){
    //error
});

答案 1 :(得分:0)

在工厂中进行呼叫

我不完全明白为什么你会遇到问题,但是关注点的分离可以帮助你看到全貌。

.factory('yourFactory', function($http){
    getFirstThing: function(){
        return $http.get("path1");
    },
    getSecondThing: function(){
        return $http.get("path2");
    }
});

将if语句添加到控制器

if(a || c) {
   yourFactory.getTheFirstThing;
}
if(b || c) {
   yourFactory.getTheSecondThing;
}

答案 2 :(得分:0)

为什么if语句会出错?

if(c)
    $http.get("path1").success(function(data){
        $http.get("path2")
    })
else
{
    if(a)
        $http.get("path1");
    else
        $http.get("path2");
}