la capture des erreurs dans le fichier d'enregistrement des promesses
Angular2 est très utile promet d'erreur attraper mécanisme pour les chaînes de promesses. Pourtant, le cas habituel (au moins pour moi), c'est que des promesses appelée à partir de la volonté du gestionnaire de la précédente. Cela est dû à la nécessité de traiter l'information avant le début de la prochaine promesse. Par exemple:
this.d( "facebookOAuthLogin() - starts" );
this.fbProvider.login().then(
( loginResponse: { status: string, authResponse: any, accessToken: string, expiresIn: string, session_key: string, sig: string, userID: string } ) =>
{
this.d( "facebookOAuthLogin() - fbProvider.login() succeeded" );
Config.config.sessionToken = loginResponse.authResponse.accessToken;
this.fbProvider.getCurrentUserProfile().then(
( profileData : { email: string, name: string } ) =>
{
this.d( "facebookOAuthLogin() - fbProvider.getCurrentUserProfile() succeeded" );
Config.config.user_email = profileData.email;
Config.config.user_name = profileData.name;
this.fbProvider.getUserPicture().then(
( pictureData : { data:{ is_silhouette: boolean, url: string, width: number, height: number } } ) =>
{
this.d( "facebookOAuthLogin() - fbProvider.getUserPicture() succeeded" );
//this.facebook_picture_url = pictureData.data.url;
//this.facebook_picture_is_silhouette = pictureData.data.is_silhouette;
if( pictureData.data.is_silhouette || pictureData.data.url == null )
{
this.d( "facebookOAuthLogin() - pictureData.data.url == null" );
Config.config.jpegBase64Data = null;
this.afterFacebookLogin();
}
else
{
this.d( "facebookOAuthLogin() - pictureData.data.url != null" );
ImageStore.readToData( pictureData.data.url ).then(
dataBase64 =>
{
this.d( "facebookOAuthLogin() - facebook picture read successfully" );
Donc, la question est de savoir Si je veux attraper toutes les erreurs dans tous les gestionnaires dans la façon la plus simple (laissons le type des exceptions - suppose que j'ai juste besoin de vous connecter l'erreur et de faire rapport. Toute erreur - Sans les manipuler séparément.)
De ce que je comprends de mettre un try{}catch(err) le code ne serait pas rattraper les erreurs levée à partir de la Promesse de gestionnaire.
Avec le code ci-dessus - j'ai besoin d'ajouter un try/catch dans toute Promesse de gestionnaire, ou puis-je utiliser l'externe (d'abord) la promesse de l' .catch() la méthode?
Vous devez vous connecter pour publier un commentaire.
Une façon de chaîne de promesses de retour d'une promesse à l'intérieur de
then
fonction, comme ceci:Lorsque toutes les promesses sont résolus, comme prévu, toutes les méthodes sont appelées de façon séquentielle (
method1 -> method2 -> method3 -> handleFinally
).Quand une promesse échoue, tous les suivants sont ignorés et
catch
est appelé à la place. En supposantmethod2
échoue, nous avons cette chaîne d'appels:method1 -> method2 -> handleError -> handleFinally
.Maintenant, supposons que nous voulons ignorer l'erreur dans
method2
, nous pouvons ajouter une instruction catch pour cet appel:Avis que le
catch
ne doit pas être placée dans la chaîne principale de promesses. Le bloc suivant explique un peu plus:Ont chacun promis le retour de la imbriquée promesse, et le sommet de la promesse d'avoir un .catch(..)