web-dev-qa-db-fra.com

Comment retourner une promesse appropriée avec TypeScript

J'apprends donc Angular 2 avec TypeScript.

J'arrive à un point pour écrire un service moqueur qui (je crois) devrait renvoyer une promesse si le service obtient l'objet avec succès et renvoyer une erreur si quelque chose se produit.

J'ai essayé de suivre le code, mais il semble que ce ne soit pas une syntaxe d'écriture pour TypeScript.

Mis à jour le 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  )}  );
    }

Mais à ma grande surprise, le TypeScript s'est plaint de ce qu'il "n'existe pas de meilleur type commun parmi les expressions de retour".

Quel devrait être le bon code? Alors que je pourrais utiliser sur mon composant pour consommer si MyClass est renvoyé correctement et refléter une erreur s'il en existe du service.

Merci

34
TypingPanda

Il est considéré comme une bonne pratique d’incorporer l’ensemble du corps de la fonction dans le constructeur Promise. Par conséquent, si une erreur se produisait, elle serait convertie en rejet. Dans ce cas, cela résout aussi votre problème, je crois.

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);
    });
}
46
Tamas Hegedus