Javascript 我应该如何声明一个函数的返回类型,该函数返回一个没有数据的$q承诺?
我有这个功能:Javascript 我应该如何声明一个函数的返回类型,该函数返回一个没有数据的$q承诺?,javascript,angularjs,typescript,Javascript,Angularjs,Typescript,我有这个功能: getMethod = (): ng.IPromise<any> => { if (1 == 2) { return this.$q.when(); } var defer = this.$q.defer(); this.$http({ url: '/abc', method: "GET" }) .success((): void => {
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=>{
如果(1==2){
返回此。$q.when();
}
var defer=this.$q.defer();
这是$http({
url:“/abc”,
方法:“获取”
})
.success(():void=>{
//
defer.resolve();
})
.错误(():void=>{
//
defer.reject();
})
回报、承诺;
}
这可以正常工作,并且返回的承诺不包含任何数据
因此,我将第一行更改为:
getMethod = (): ng.IPromise<void> => {
getMethod=():ng.IPromise=>{
现在我得到一个错误:
错误3无法将“ng.IPromise”转换为“ng.IPromise”:
“ng.IPromise”和“ng.IPromise”类型的属性“then”类型不兼容:
有人能告诉我如何正确声明返回类型吗?我知道使用可以工作,但如果函数真的总是返回void,这似乎不是一个干净的解决方案。我不确定我是否理解您试图执行的操作,但这会无误地传输
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;
}
getMethod=():ng.IPromise=>{
变量延迟:ng.IDeferred=this.$q.defer();
这是.http({url:'/abc',方法:“GET”})(
有效负载=>defer.resolve(),
error=>defer.reject()
);
回报、承诺;
}
这可能意味着您想知道操作是否已完成
我会选择观察者模式、消息传递、回调?
在我看来,承诺最好是封装值,可能是值,我不确定我是否理解您试图做的事情,但这是透明的,没有错误
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;
}
getMethod=():ng.IPromise=>{
变量延迟:ng.IDeferred=this.$q.defer();
这是.http({url:'/abc',方法:“GET”})(
有效负载=>defer.resolve(),
error=>defer.reject()
);
回报、承诺;
}
这可能意味着您想知道操作是否已完成
我会选择观察者模式、消息传递、回调?
在我看来,承诺最好是封装值,也许是值,请为语言语法添加相关的标记。那么,为什么你的承诺不能用值来解析呢?通常应该这样。顺便说一句,这段代码有更多内容,但对于这个问题,它被简化了。承诺返回时有成功或失败,这就足够了。@Steve-这就是在ng的接口规范中,请不要将SM作为选项。IPromise@SamanthaJ将行
var defer=this.$q.defer();
更改为var defer=this.$q.defer();
(明确指定void类型参数)请为语言语法添加相关标记。那么,为什么您的承诺不使用值进行解析呢?通常应该这样。顺便说一句,这段代码有更多内容,但对于这个问题它被简化了。承诺返回的成功或失败就够了。@Steve-这似乎不是ng接口规范中的选项。IPromise@SamanthaJ改变行var defer=this.$q.defer();
到var defer=this.$q.defer();
(明确指定void类型参数)