如何使用TypeScript返回正确的Promise [英] How to return a proper Promise with TypeScript
问题描述
所以我正在用打字稿学习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屋!