由于Promise
现已正式规范,所以如何将以下代码段中的$q.defer()
承诺创建转换为使用$q(function (resolve, reject) {})
构造函数语法?
// Cancel any ongoing $http request so that only the most recent $http
// callback gets invoked
var canceller;
function getThing(id) {
if (canceller) canceller.resolve();
canceller = $q.defer();
return $http.get('/api/things/' + id, {
timeout: canceller.promise
});
}
(来自$http docs的Fyi:timeout
是" ...以毫秒为单位,或承诺在解决时应该中止请求。")
答案 0 :(得分:1)
我会这样做:
var canceller = null;
function getThing(id) {
if (canceller) canceller();
return Promise.resolve($http.get('/api/things/' + id, {
timeout: new Promise(function(resolve) {
canceller = resolve;
})
}));
}
我假设您从未使用过canceller.reject
,所以您可以随时保留resolve
函数本身以便下次调用它。