我应该如何声明返回没有数据的 $q 承诺的函数的返回类型?
Posted
技术标签:
【中文标题】我应该如何声明返回没有数据的 $q 承诺的函数的返回类型?【英文标题】:How should I declare the return type of a function that returns a $q promise with no data? 【发布时间】:2014-11-03 11:36:27 【问题描述】:我有这个功能:
getMethod = (): ng.IPromise<any> =>
if (1 == 2)
return this.$q.when();
var defer = this.$q.defer();
this.$http(
url: '/abc',
method: "GET"
)
.success((): void =>
//
defer.resolve();
)
.error((): void =>
//
defer.reject();
)
return defer.promise;
这没问题,返回的承诺不包含任何数据。
所以我把第一行改成:
getMethod = (): ng.IPromise<void> =>
现在我得到一个错误:
错误 3 无法将“ng.IPromise”转换为“ng.IPromise”: 'ng.IPromise' 和 'ng.IPromise' 类型的属性 'then' 类型不兼容:
有人可以就如何正确声明返回类型给我建议。我知道 using 有效,但如果函数真的总是返回 void,它似乎不是一个干净的解决方案。
【问题讨论】:
请为语言语法添加相关标签。 那么为什么你的promise没有用一个值来解决?它通常应该。顺便说一句,avoid the deferred antipattern 此代码还有更多内容,但针对此问题进行了简化。承诺返回成功或失败就足够了。 @Steve - 这似乎不是 ng.IPromise 接口规范中的一个选项 @SamanthaJ 将var defer = this.$q.defer();
这一行改为var defer = this.$q.defer<void>();
(明确指定void类型参数)
【参考方案1】:
我不确定我是否理解你想要做的事情,但是这个编译没有错误
getMethod = (): ng.IPromise<void> =>
var defer:ng.IDeferred<void> = this.$q.defer<void>();
this.$http( url: '/abc', method: "GET").then(
payload => defer.resolve(),
error=> defer.reject()
);
return defer.promise;
这可能意味着您想知道操作已完成 我会选择观察者模式、消息传递、回调? 在我看来,promise 最好封装值,maybe_value,
【讨论】:
以上是关于我应该如何声明返回没有数据的 $q 承诺的函数的返回类型?的主要内容,如果未能解决你的问题,请参考以下文章