Angular 如何使用TypeScript返回正确的承诺

Angular 如何使用TypeScript返回正确的承诺,angular,typescript,es6-promise,Angular,Typescript,Es6 Promise,所以我正在学习使用typescript的Angular 2 我即将编写一个模拟服务,如果服务成功获取对象,它(我相信)应该返回一个承诺,如果发生任何事情,它应该返回一个错误 我尝试了以下代码,但看起来它不是typescript的编写语法 更新代码: saveMyClass(updatedMyClass: MyClass){ //saving MyClass using http service //return the saved MyClass or error

所以我正在学习使用typescript的Angular 2

我即将编写一个模拟服务,如果服务成功获取对象,它(我相信)应该返回一个承诺,如果发生任何事情,它应该返回一个错误

我尝试了以下代码,但看起来它不是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  )}  );
    }
saveMyClass(更新周期:MyClass){
//使用http服务保存MyClass
//返回保存的MyClass或错误
var savedMyClass:MyClass=somelogic返回savedObject(updatedMyClass);
如果(isSomeCondition)
返回承诺。拒绝(新错误(“无理由拒绝”);
其他的
返回新承诺(resolve=>{setTimeout(()=>resolve(savedMyClass),1500)});
}
但令我惊讶的是,typescript抱怨“在返回表达式中没有最好的通用类型”

正确的代码应该是什么?所以,若返回了正确的MyClass,我可以在组件上使用它,若服务中存在错误,则可以反映错误


感谢

将整个函数体嵌入到
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);
    });
}
saveMyClass(更新周期:MyClass){
返回新承诺((解决、拒绝)=>{
//使用http服务保存MyClass
//返回保存的MyClass或错误
var savedPackage:Package=updatedPackage;
如果(isSomeCondition){
抛出新错误(“无理由拒绝”);
}
设置超时(()=>{
解析(savedPackage);
}, 1500);
});
}

这是我为自己的目的想出的一个例子:

const join=require('path')。join
const spawn=require('child_process')。spawn;
const learnDir=join(uu dirname,'learn')
const cp=spawn('du',['-s',learnDir]);
cp.stdout.on(“数据”,函数(数据){
const size=parseInt(data.toString().split(“”)[0].trim())
控制台日志(大小);
});

不要用typescript标记javascript!Typescript不是纯javascript你试过这个吗?假设saveMyClass是一个函数,试试这个函数saveMyClass(updatedMyClass:MyClass):任何{….这里的代码..}setTimeout都不应该用来控制这样的事情,但是既然typescript和javascript从根本上被破坏了,你也可以这样做,不管它有多么荒谬。@CarComp这段代码是对OPs问题的直接回答,没有任何不必要的修改。JavaScript确实在许多地方从根本上被破坏了,但不是异步部分。与其他语言相比,javascript中的Async相当好且简单。