javascript - Breezejs Typescript Promise 在定义文件中没有失败方法

标签 javascript typescript breeze q

我正在开发一个项目,我使用 Breejs 与我的 webapi 进行交互。 我设置了一个简单的注册表单,我可以用它来注册新用户:

public addUser(user: IApiUser): void {
    this.dataContext.entityManager.addEntity(this.dataContext.entityManager.createEntity("ApiUserEntity", user));
}

要在 webapi 中写入添加的实体,我在 Breezejs 中的实体管理器上调用 saveChanges() 方法:

// Save any changes for this datacontext
return this.dataContext.entityManager.saveChanges().then((saveResult: breeze.SaveResult): breeze.SaveResult => {
    return saveResult;
});

我已经从here下载了breezejs的typescript定义文件 ,但查看 saveChanges 签名:

 saveChanges(entities?: Entity[], saveOptions?: SaveOptions, callback?: SaveChangesSuccessCallback, errorCallback?: SaveChangesErrorCallback): breeze.promises.IPromise<SaveResult>;

它返回类型的 promise :

breeze.promises.IPromise<SaveResult>;

现在,当我检查定义文件中的 IPromise 时,我得到以下界面:

interface IPromise<T> {
    then<U>(onFulfill: (value: T) => U, onReject?: (reason: any) => U): IPromise<U>;
    then<U>(onFulfill: (value: T) => IPromise<U>, onReject?: (reason: any) => U): IPromise<U>;
    then<U>(onFulfill: (value: T) => U, onReject?: (reason: any) => IPromise<U>): IPromise<U>;
    then<U>(onFulfill: (value: T) => IPromise<U>, onReject?: (reason: any) => IPromise<U>): IPromise<U>;
    catch<U>(onRejected: (reason: any) => U): IPromise<U>;
    catch<U>(onRejected: (reason: any) => IPromise<U>): IPromise<U>;
    finally(finallyCallback: () => any): IPromise<T>;
}

我只是不明白他们为什么选择这样实现。我正在使用 Q.js 库,它有一个失败和一个 .done 方法等,但如果我输入这些,我的 typescript 文件将无法编译,因为界面无法识别这些方法。

我已经使用 Q.js 查找了关于 Breeze 的特定定义文件,但它们似乎不存在。当然,我可以只编辑定义文件,但我想知道这样设置的原因是什么。

最佳答案

fail 只是 catch 的同义词,适用于旧浏览器。 catch 适用于所有现代浏览器。 EcmaScript 6 也有 native promises使用 catch 方法。

您可以在代码中的某个位置声明缺少的方法:

interface IPromise<T> {
    fail<U>(onRejected: (reason: any) => U): IPromise<U>;
    fail<U>(onRejected: (reason: any) => IPromise<U>): IPromise<U>;
}

此声明将是 merged带有来自原始 .d.ts 的声明。

关于javascript - Breezejs Typescript Promise 在定义文件中没有失败方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32034903/

相关文章:

typescript -创建一个对象,通过其名称动态选择类

typescript - 如果值未定义,则设置属性的语法简短明了?

javascript - 如何让 WebStorm 知道一个对象的属性链接到另一个文件中的声明?

javascript - 空分组 Jqgrid - 没有项目的组

typescript - 是否可以从 Typescript 字符串联合创建对象?

javascript - BreezeJS 以 json 文件作为数据源(无服务器解决方案)

breeze - BreezeJS 中包含单引号或双引号的字符串查询返回错误

breeze - 在 Breeze 中创建复杂类型的未绑定(bind)实例的正确方法是什么?

Javascript 问题确认消息

javascript - 当窗口不可见时选择/剪切/粘贴