如何使用TypeScript返回正确的Promise [英] How to return a proper Promise with TypeScript

查看:3253
本文介绍了如何使用TypeScript返回正确的Promise的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我正在用打字稿学习Angular 2.

So I am learning Angular 2 with typescript.

我到了要编写一个模拟服务的地步,我相信,如果该服务成功获得对象,则该服务应返回Promise,如果发生任何事情,则应返回错误.

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.

更新了代码:

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".

正确的代码应该是什么?这样,如果返回正确的MyClass,我就可以在组件上使用它,如果服务中存在任何错误,则可以反映错误.

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.

谢谢

推荐答案

将整个函数体嵌入到Promise构造函数中是一种好习惯,因此,如果发生任何错误,它将转换为拒绝.我相信,在这种情况下,它也可以解决您的问题.

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

这篇关于如何使用TypeScript返回正确的Promise的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆