观看了很多Egghead.io视频,我注意到一个常见的模式是返回自定义承诺并在回调中解决它.
.factory('myFact', function($q, $http) {
return {
getData: function() {
var deferred = $q.defer();
$http.get('/path/to/api')
.success(function(data) {
deferred.resolve(data);
});
return deferred.promise;
}
};
});
Run Code Online (Sandbox Code Playgroud)
我通常会这样写:
.factory('myFact', function($http) {
return {
getData: function() {
return $http.get('/path/to/api')
.then(function(res) {
return res.data;
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
返回$q.defer()承诺而不是$http承诺是否有任何好处?这些方法与我相同.
我发现Angular $资源的行为非常奇怪.请查看以下代码行:
class Service
constructor: ($resource) ->
service = $resource '/record/:id'
Service::list = (cb) ->
service.query().$promise.then (data) ->
#result: data == [e, $promise: Object, $resolved: true]
cb data
Service::get = (id, cb) ->
service.get(id:id).$promise.then (data) ->
#result: data == {id: 1, name: 'name' ...}
cb format data
Run Code Online (Sandbox Code Playgroud)
服务"get"方法返回服务器发送的正确值(对象),但"list"方法作为结果返回包含$ promise和$ resolved的数组...
有没有人有一些逻辑解释?
更新:
我发现了这个问题.服务结果是字符串数组,导致sting chars的结果数组.这可以通过使用$ http而不是$ resource来解决.
例如:
服务器端 - > ['list','of','elements']
客户端 - > ['l','我','s','t']