在容易理解的伪代码中,我在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方法中。 我可以摆弄一个第二个听的功能,但我认为应该有一个合适的方法来做到这一点。
答案 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(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");
}