2017-03-29 4 views
0

ich diesen Dienst haben, wo ich wie diese tunein Versprechen aus dem Dienst zurück

userRes.getCurrentUser =() => { 
    return userRes.get({ 
     user: 1 
    }); 
}; 

die Ich mag dieses

in meinem Controller verwenden
console.log(currUserService.getCurrentUser()); 

und es funktioniert gut, bekomme ich ein Versprechen zurück und das Objekt, wenn es

ABER

aufgelöst ich eine Klasse erstellt werden soll, nachdem ich die Daten bekommen, s o Ich mag dieses

userRes.getCurrentUser =() => { 
    userRes.get({ 
     user: 1 
    }).$promise.then(data => { 
     return new User(data); 
    }); 
}; 

Aber dann bekomme ich undefined

Wie kann ich es die Klasse machen zurückkehren?

Danke

bearbeiten

let userRes = $resource('url', {}, {}); 
+0

Rückkehr userRes.get tun können, hier ist eine nützliche Verbindung, um Versprechen https://pouchdb.com/2015/05/18/we-have-a- Problem-mit-Versprechen.html – Groben

Antwort

0

Ich bin nicht sicher, was genau userRes ist, aber im Allgemeinen, .then() gibt seine Versprechen Kette.

Ändern

userRes.getCurrentUser =() => { 
    userRes.get({ 
     user: 1 
    }).$promise.then(data => { 
     return new User(data); 
    }); 
}; 

zu

userRes.getCurrentUser =() => { 
    return userRes.get({ // !! Notice the return statement here 
     user: 1 
    }).$promise.then(data => { 
     return new User(data); 
    }); 
}; 

geben Ihnen die Versprechen Kette, die Sie .then() eine weitere hinzufügen können auf die neue User zurück zuvor zu nutzen.

0

In Ihrem letzten Beispiel gibt es nichts zurück, Sie sollten ein Versprechen dorthin zurückgeben, indem Sie return hinzufügen.

Nachdem Sie Promise<User> im Service, in der Klasse zurück, wo Sie es nennen, sollten Sie etwas tun:

var userPromise = currUserService.getCurrentUser(); // Promise<User> type 
userPromise.then(user => { /* do something with the user when it is resolved*/}); 
0

In Ihrem Controller Skript, currUserService.getCurrentUser() wird durch die Funktion ausführen, ohne Umgang mit dem Versprechen. In der Tat wird es nichts zurückgeben.

console.log(currUserService.getCurrentUser()); 

richtig die $ Versprechen zu verwenden, können Sie die $ Versprechen zurückzukehren, wie in

return userRes.getCurrentUser =() => { 
    userRes.get({ 
    user: 1 
}).$promise.then(data => { 
    return new User(data); 
}); // end of this chain is another $promise 

};

jetzt in Ihrem Controller Sie dieses

currUserService.getCurrentUser().then(user =>{ 
    console.log(user); 
}); 
Verwandte Themen