我有一个基本控制器,将一个名为Uom的服务注入其中。我从我的控制器调用服务如下:
Uom.get_measurement_unit_conversions().then( function( measurement_unit_conversions ) {
// Do some stuff here
});我的服务看起来..。
angular.module('uomService', [])
.factory('Uom', function( $http ) {
return {
/**
* Will make a call to the restful API to get the
* measurement unit conversions and then return the formatted data.
*
* @return {float} Converted value
*/
get_measurement_unit_conversions: function()
{
var conversions = {};
$http({ method: 'GET', url: '/api/measurement_unit_conversions' })
.then( function( response ) {
angular.forEach( response.data.measurement_unit_conversions, function( object, key ) {
if( conversions.hasOwnProperty( object.source_measurement_unit_id ) == false )
{
conversions[object.source_measurement_unit_id] = {};
}
conversions[object.source_measurement_unit_id][object.target_measurement_unit_id] = object.formula;
});
return conversions;
});
}
}
});但我一直搞错了
Uom.get_measurement_unit_conversions(...).then不是一个函数
我的方法是从另一个堆栈溢出问题开始的。
What is the best practice for making an AJAX call in Angular.js?
知道我做错了什么吗?
发布于 2015-11-12 17:56:17
这里有几个问题-首先,请注意,您的get_measurement_unit_conversions函数实际上没有返回任何内容。返回语句位于then块中,但服务函数本身正在返回undefined。正如查尔斯所说,您必须从$http(...)返回结果。
另一个问题是,为了使“承诺链”工作,您需要从then函数中返回一个承诺。
下面是应该工作的服务的修改版本(小心,未经测试)。请注意,我注入了$q服务,以便使用$q.when(),它将任意值包装在一个新的承诺中:
angular.module('uomService', [])
.factory('Uom', function( $http, $q ) {
return {
/**
* Will make a call to the restful API to get the
* measurement unit conversions and then return the formatted data.
*
* @return {float} Converted value
*/
get_measurement_unit_conversions: function()
{
return $http({ method: 'GET', url: '/api/measurement_unit_conversions' })
.then( function( response ) {
var conversions = {};
angular.forEach( response.data.measurement_unit_conversions, function( object, key ) {
if( conversions.hasOwnProperty( object.source_measurement_unit_id ) == false )
{
conversions[object.source_measurement_unit_id] = {};
}
conversions[object.source_measurement_unit_id][object.target_measurement_unit_id] = object.formula;
});
return $q.when(conversions);
});
}
}
});发布于 2015-11-12 17:30:47
您必须返回$http调用,因为这将返回一个承诺。
return $http(...)https://stackoverflow.com/questions/33677465
复制相似问题