q.defer deferred.resolve 已弃用
q.defer deferred.resolve is deprecated
我刚刚看到这段代码已被弃用,我一直在尝试遵循本指南:http://www.codelord.net/2015/09/24/$q-dot-defer-youre-doing-it-wrong/ 以正确的方式使用它,但我似乎无法让它工作。有人可以帮我吗?
function fetchPlayers(callback) {
var deferred = $q.defer();
$http.get(URL)
.success(function (response) {
var data = angular.fromJson(response);
for (var g = 0; g < data.player.length; g++) {
var player = model.findPlayerByName(data.player[g].name);
if (player == null) {
var newPlayer = {
_id: (new Date).getTime(),
name: data.player[g].name,
position: data.player[g].position,
};
model.players.push(newPlayer);
}
}
deferred.resolve(model.players);
});
return deferred.promise;
}
我觉得应该是:
function fetchPlayers(callback) {
return $http.get(URL)
.then(function (response) {
var data = angular.fromJson(response.data);
for (var g = 0; g < data.player.length; g++) {
var player = model.findPlayerByName(data.player[g].name);
if (player == null) {
var newPlayer = {
_id: (new Date).getTime(),
name: data.player[g].name,
position: data.player[g].position,
};
model.players.push(newPlayer);
}
}
return model.players;
});
}
基本上,
- 将所有
promise.success(callback)
更改为 promise.then(callback)
- return 直接承诺,而不是创建一个额外的延迟对象,该对象在第一个承诺解决时得到解决。
- (注意)
callback
的 return 值被转发到链中的下一个承诺。
另一个答案很接近,但是 .then
方法用响应对象而不是数据回调。
function fetchPlayers() {
return $http.get(URL)
.then(function onFulfilled(response) {
//DO This
var data = angular.fromJson(response.data);
//NOT This
//var data = angular.fromJson(response);
for (var g = 0; g < data.player.length; g++) {
var player = model.findPlayerByName(data.player[g].name);
if (player == null) {
var newPlayer = {
_id: (new Date).getTime(),
name: data.player[g].name,
position: data.player[g].position,
};
model.players.push(newPlayer);
}
}
return model.players;
});
}
来自文档:
The response object has these properties:
- data –
{string|Object}
– The response body transformed with the transform functions.
- status –
{number}
– HTTP status code of the response.
- headers –
{function([headerName])}
– Header getter function.
- config –
{Object}
– The configuration object that was used to generate the request.
- statusText –
{string}
– HTTP status text of the response.
我刚刚看到这段代码已被弃用,我一直在尝试遵循本指南:http://www.codelord.net/2015/09/24/$q-dot-defer-youre-doing-it-wrong/ 以正确的方式使用它,但我似乎无法让它工作。有人可以帮我吗?
function fetchPlayers(callback) {
var deferred = $q.defer();
$http.get(URL)
.success(function (response) {
var data = angular.fromJson(response);
for (var g = 0; g < data.player.length; g++) {
var player = model.findPlayerByName(data.player[g].name);
if (player == null) {
var newPlayer = {
_id: (new Date).getTime(),
name: data.player[g].name,
position: data.player[g].position,
};
model.players.push(newPlayer);
}
}
deferred.resolve(model.players);
});
return deferred.promise;
}
我觉得应该是:
function fetchPlayers(callback) {
return $http.get(URL)
.then(function (response) {
var data = angular.fromJson(response.data);
for (var g = 0; g < data.player.length; g++) {
var player = model.findPlayerByName(data.player[g].name);
if (player == null) {
var newPlayer = {
_id: (new Date).getTime(),
name: data.player[g].name,
position: data.player[g].position,
};
model.players.push(newPlayer);
}
}
return model.players;
});
}
基本上,
- 将所有
promise.success(callback)
更改为promise.then(callback)
- return 直接承诺,而不是创建一个额外的延迟对象,该对象在第一个承诺解决时得到解决。
- (注意)
callback
的 return 值被转发到链中的下一个承诺。
另一个答案很接近,但是 .then
方法用响应对象而不是数据回调。
function fetchPlayers() {
return $http.get(URL)
.then(function onFulfilled(response) {
//DO This
var data = angular.fromJson(response.data);
//NOT This
//var data = angular.fromJson(response);
for (var g = 0; g < data.player.length; g++) {
var player = model.findPlayerByName(data.player[g].name);
if (player == null) {
var newPlayer = {
_id: (new Date).getTime(),
name: data.player[g].name,
position: data.player[g].position,
};
model.players.push(newPlayer);
}
}
return model.players;
});
}
来自文档:
The response object has these properties:
- data –
{string|Object}
– The response body transformed with the transform functions.- status –
{number}
– HTTP status code of the response.- headers –
{function([headerName])}
– Header getter function.- config –
{Object}
– The configuration object that was used to generate the request.- statusText –
{string}
– HTTP status text of the response.