Javascript 工厂未返回控制器中的对象
我想把工厂的结果传给我的控制器 到目前为止,我一直在失败,工厂内部的一切似乎都很好,我可以对结果进行console.log,它显示的很好 有什么建议吗 我的工厂目前:Javascript 工厂未返回控制器中的对象,javascript,angularjs,Javascript,Angularjs,我想把工厂的结果传给我的控制器 到目前为止,我一直在失败,工厂内部的一切似乎都很好,我可以对结果进行console.log,它显示的很好 有什么建议吗 我的工厂目前: mainApp.factory('statusFinder',['jsonQueryStations','timeConverter',函数(jsonQueryStations,timeConverter){ var findTheTime=timeConverter.getTime(); var生成器=函数(){ 返回jsonQ
mainApp.factory('statusFinder',['jsonQueryStations','timeConverter',函数(jsonQueryStations,timeConverter){
var findTheTime=timeConverter.getTime();
var生成器=函数(){
返回jsonQueryStations.stationData().then(函数(结果){
if(result.station[findTheTime]>result.station.Average){
返回“站点正忙”;
}否则{
返回“车站安静”;
}
});
}
返回{
状态:函数(){
返回生成器();
}
}
}])
我的控制器现在看起来是这样的:
mainApp.controller('stuff',['$scope','statusFinder',function($scope,statusFinder){
var data=statusFinder.status();
$scope.testing=数据;
}])
u可以从控制器而不是工厂获得承诺。只需在工厂中返回jsonQueryStations.stationData()
mainApp.factory('statusFinder', ['jsonQueryStations', 'timeConverter', function(jsonQueryStations, timeConverter){
var generator = function(){
return jsonQueryStations.stationData()
}
return {
status: function(){
return generator();
}
}
}])
现在在控制器中捕捉这样的承诺
mainApp.controller('stuff', ['$scope', 'statusFinder', function($scope, statusFinder) {
var findTheTime = timeConverter.getTime();
statusFinder.status().then(function(result) {
if (result.station[findTheTime] > result.station.Average) {
$scope.testing = "Station is busy";
} else {
$scope.testing = "Station is quiet";
}
});
}])
谢谢,我以前也做过类似的事情,我现在只是想把我的功能从控制器中移出,以便整理一下,这难道不是我一个人可以从工厂做的吗?在你的问题中,http返回一个承诺,控制器不必等待承诺,因为承诺从控制器捕获。这是避免反模式的正确方法。它将在承诺内创建另一个自定义承诺,并将mess@Blimeys美好的确保标记为回答此问题有帮助