web-dev-qa-db-ja.com

TypeScriptで適切なPromiseを返す方法

だから私はTypeScriptでAngular 2を学んでいます。

私は、サービスがオブジェクトを正常に取得した場合にPromiseを返し、何かが発生した場合にエラーを返すモックサービスを作成するポイントに到達しています。

次のコードを試してみましたが、TypeScriptの書き込み構文ではないようです。

コードを更新しました:

saveMyClass(updatedMyClass: MyClass){
        //saving MyClass using http service
        //return the saved MyClass or error
        var savedMyClass : MyClass = someLogicThatReturnsTheSavedObject(updatedMyClass);
        if(isSomeCondition)
            return Promise.reject(new Error('No reason but to reject'));
        else
            return new Promise<MyClass>(resolve => {setTimeout( ()=>resolve(savedMyClass),1500  )}  );
    }

しかし、驚いたことに、TypeScriptは「戻り式の間に最良の共通型は存在しない」と不満を漏らしました。

適切なコードは何ですか?そのため、適切なMyClassが返された場合にコンポーネントを使用して消費し、サービスからエラーが存在する場合はエラーを反映できるようにします。

ありがとう

34
TypingPanda

関数本体全体をPromiseコンストラクター内に埋め込むことをお勧めします。エラーが発生した場合、拒否に変換されます。この場合、問題も解決します。

saveMyClass(updatedMyClass: MyClass) {
    return new Promise<Package>((resolve, reject) => {
        //saving MyClass using http service
        //return the saved MyClass or error
        var savedPackage : Package = updatedPackage;
        if (isSomeCondition) {
            throw new Error('No reason but to reject');
        }

        setTimeout( () => {
            resolve(savedPackage);
        }, 1500);
    });
}
46
Tamas Hegedus