How to return a proper Promise with TypeScript

TypingPanda picture TypingPanda · Aug 31, 2016 · Viewed 70.6k times · Source

So I am learning Angular 2 with typescript.

I am reaching a point to write a mocking service which (I believe) should return a Promise if the service get the Object Successfully and Return an Error if anything happens.

I have tried following code but looks like it is not a write syntax for typescript.

Updated the CODE:

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  )}  );
    }

But to my surprise, the typescript complained that "No best common type exists among return expressions".

What should be the right code? So that I could use on my component to consume if proper MyClass is returned and reflect error if any exists from service.

Thanks

Answer

Tamas Hegedus picture Tamas Hegedus · Aug 31, 2016

It is considered a good practice to embed the whole function body inside the Promise constructor, so should any error happen, it would be converted to a rejection. In this case it solves your problem too I believe.

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);
    });
}