2015-07-10 64 views
0

我一直坚持这一段时间,现在不知道为什么值没有被返回。我正在使用Angular $resource向API发出GET请求。

我的$资源工厂看起来是这样的:

.factory("Bookings", function ($resource) { 
    return $resource("www.example/bookings_on_date/:day", {}); 
}) 

我试图实现诺言,但我不能这样做正确。

function getBookings(day){ 
     return Bookings.get({"day": day}).$promise.then(function(data) { 
     console.log(data.total) 
     return data.total; 
    }); 
} 

$scope.todaysBookings = getBookings(TODAY); 
$scope.tomorrowsBookings = getBookings(TOMORROW); 

当我在它返回未定义控制台查看任一console.log($scope.todaysBookings)$scope.tomorrowBookings

我也尝试了一切从这jsfiddle,但不幸的是没有任何运气。

+0

你错过了之前'Bookings.get'一个'return'。没有返回值的JavaScript函数返回'undefined'。 –

+0

你需要阅读http://stackoverflow.com/questions/14220321/how-to-return-the-response-from-an-asynchronous-call/16825593 –

+0

平我,让我知道,如果它解决了你的问题,所以我们可以关闭重复,或者如果没有 - 编辑,我们将看到我们可以做些什么 - 快乐的编码。 –

回答

2

我想应该是这样的:

function getBookings(day) { 
    return Bookings.get({"day": day}).$promise.then(function(data) { 
     return data.total; 
    }); 
} 

getBookings(TODAY).then(function(total) { 
    $scope.todaysBookings = total; 
}); 

getBookings(TOMORROW).then(function(total) { 
    $scope.tomorrowsBookings = total; 
}); 

更新:我认为明年的代码风格可以帮助你防止下一个扩展方法问题:

function getBookings(args) { 
    return Bookings.get(args).$promise; 
} 

getBookings({"day": TODAY}).then(function(data) { 
    $scope.todaysBookings = data.total; 
}); 

getBookings({"day": TOMORROW}).then(function(data) { 
    $scope.tomorrowsBookings = data.total; 
}); 

有点优势这里:

  • 将对象传入函数可以帮助您轻松地将不同的 参数传递到方法中,并且参数非常接近方法调用(一个 稍微容易阅读);
  • 返回来自函数 的完整响应可以帮助您处理不同的数据(方法可以重放 不同的响应取决于参数,但在这种情况下不是好的练习 );

p.s.否则,你可以删除函数声明和这样的代码(以保持它的简单,越好):

Bookings.get({"day": TODAY}).$promise.then(function(data) { 
    $scope.todaysBookings = data.total; 
}); 

Bookings.get({"day": TOMORROW}).$promise.then(function(data) { 
    $scope.tomorrowsBookings = data.total; 
}); 
+0

完美,谢谢 –

+0

@Paul Fitzgerald更新 – FSou1

+0

伟大的答案,谢谢 –