【发布时间】:2017-01-11 23:45:03
【问题描述】:
我正在尝试通过以下方式返回通用承诺
public getUserPreferences: () => ng.IPromise <string> = () => {
var promise = this.makeRequest<string>('http://someurl.com',null)
.then((response:string) => {
let res: string = response;
return res;
}
)
.catch((error) => {
});
return promise;
};
public makeRequest<T>(וrl: string, data?: any,
config?: any, verb?: HttpMethod): ng.IPromise<T> {
// Cache key contains both request url and data
var cacheKey = url + '*' + JSON.stringify(data);
var deferred = this.$q.defer();
var httpRequest: any;
var responseData: T;
var start = new Date().getTime();
// Trying to retrieve cache data if needed
if (!config || config.cache != false) {
responseData = this.cacheService.get(cacheKey);
}
if (responseData) {
deferred.resolve(responseData);
}
else {
switch (verb) {
case HttpMethod.GET:
httpRequest = this.$http.get(url, config);
break;
case HttpMethod.POST:
httpRequest = this.$http.post(url, data, config);
break;
case HttpMethod.PATCH:
httpRequest = this.$http.patch(url, data, config);
break;
default:
httpRequest = this.$http.post(url, data, config);
break;
}
httpRequest
.then((res: any) => {
responseData = res.data;
this.cacheService.put(cacheKey, responseData);
deferred.resolve(responseData);
})
.catch((error: any) => {
deferred.reject(error);
});
}
return deferred.promise;
}
但我在 getUserPreferences 上收到以下错误:
错误:(132, 9) TS2322: 类型 '() => IPromise' 不可分配 输入'() => IPromise'。类型 'IPromise' 不是 可分配给类型“IPromise”。类型 'void' 不可分配 输入“字符串”。
【问题讨论】:
-
从
getUserPreferences删除catch块 -
@AlekseyL。谢谢!有用!但是我怎样才能捕捉到异常呢?
-
如果这是处理异常的正确位置并且您不想在异常情况下返回任何内容 - 您应该将返回类型定义为
ng.IPromise <string|void>。请注意,如果您在此处捕获异常,则承诺将始终成功解决。
标签: angularjs generics typescript promise