如何使用TypeScript返回正确的Promise

Typ*_*nda 36 typescript es6-promise angular

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

我正在努力编写一个模拟服务,我相信如果服务成功获取对象,则应返回Promise,如果发生任何事情则返回错误.

我尝试过以下代码,但看起来它不是打字稿的写法语法.

更新了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  )}  );
    }
Run Code Online (Sandbox Code Playgroud)

但令我惊讶的是,打字稿抱怨"返回表达式中没有最常见的类型".

什么应该是正确的代码?因此,如果返回正确的MyClass,我可以使用我的组件来消费,如果服务中存在任何MyClass则反映错误.

谢谢

Tam*_*dus 48

将整个函数体嵌入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);
    });
}
Run Code Online (Sandbox Code Playgroud)

  • @CarComp此代码是OPs问题的直接答案,无需任何不必要的修改. (7认同)
  • setTimeout 永远不应该被用来控制这样的事情,但是由于 typescript 和 javascript 从根本上被破坏了,你不妨这样做,不管它有多荒谬。 (3认同)