2015-08-16 29 views
0

我正在使用breezejs與我的webapi進行即時通訊的項目。 我已經安裝使用,我可以一個新的用戶註冊一個簡單的登記表格:在breezejs我的EntityManagerBreezejs打字稿承諾沒有定義文件中的失敗方法

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

要寫入附加實體中的WebAPI我打電話調用SaveChanges()方法:

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

我從here 下載的breezejs的打字稿定義文件,但看的SaveChanges簽名:

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

它返回類型的承諾:

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方法等,但如果我輸入這些我的打字稿文件不會編譯,因爲接口不識別這些方法。

我已經找了具體的定義文件與Q.js微風,但他們似乎沒有存在。 Offcourse我可以編輯定義文件,但我想知道這是什麼原因設置它。

回答

3

fail只是catch的一個同義詞,適用於舊版瀏覽器。 catch適用於所有現代瀏覽器。另外,EcmaScript 6的原生promisescatch方法。

你可以在你的代碼某處聲明缺少方法:

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

此聲明將merged從原來的.d.ts聲明。