首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回Promise< void >而不是Promise<any>

返回Promise< void >而不是Promise<any>
EN

Stack Overflow用户
提问于 2017-05-30 22:41:09
回答 1查看 11.2K关注 0票数 0

我通过AngularJS开发了许多具有相同签名的异步函数,即app.Domain.GenericModel.EntityBase (我的通用模型)--这是一个示例:

代码语言:javascript
复制
get(resource: string): ng.IPromise<app.Domain.GenericModel.EntityBase[]> {
            var self = this;
            var deferred = self.qService.defer();
            self.httpService.get(resource).then(function (result: any) {
                deferred.resolve(result.data);
            }, function (errors) {
                self.exception = new app.Exceptions.Model.Exception(errors.status, errors.statusText);
                deferred.reject(self.exception);
            });

            return deferred.promise;
        }

然后我尝试用链式promises.So调用一些与前一个类似的服务,我得到了以下错误:“IPromise类型不能分配给IPromise类型,EntityBase类型不能分配给类型IPromise”

代码语言:javascript
复制
   var self = this; 
    var promise = self.$q.when();
    promise = promise.then(() => {
                                            return self.EcritureService.get(critureToSave);
                                        }).then((compte: EntityBase) => {
                                            return self.CompteService.getSingle(Number(data.compte));
                                        }).then((EntityBase) => {
                                            currentAccount.montantCpt = currentAccount.montantCpt + montant;
                                            return self.CompteService.update(currentAccount:EntityBase);
                                        });

--我搜索了很多关于这个两难处境的内容,这是一种不显眼的方法,可以通过类型断言将函数的返回转换为常见的模式"IPromise“,这种断言主要是基于编译器的欺骗或诸如此类的。我不理解这个技巧,如果其他人有一个idea..could,他会澄清它,不管它是否有效。

EN

回答 1

Stack Overflow用户

发布于 2017-05-31 00:54:31

在您的示例中,变量promise的类型隐式为ng.IPromise<void>,因为这是$q.when()返回的内容。

类型为ng.IPromise<void>的变量无法获得分配给它的ng.IPromise<EntityBase>对象。

根据你想要达到的目标,你可以做不同的事情。

您可以使用另一个变量来实现您以后的承诺:

代码语言:javascript
复制
let anotherPromise = promise.then(() => { ...

可以在开始时显式声明变量的类型为ng.IPromise<any>

代码语言:javascript
复制
let promise: ng.IPromise<any> = self.$q.when();
let promise = promise.then(() => { ...

或者你可以让你的承诺链最终真正返回一个无效的承诺:

代码语言:javascript
复制
promise = promise.then(() => {... your chain ...}).then(() => { });

也许还有其他选择,但我希望这会有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44273022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档