IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Angular Discussion :

Déclarer une fonction comme Observable


Sujet :

Angular

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Déclarer une fonction comme Observable
    Bonjour,

    Pour un besoin d'asynchronisme, je voudrais utiliser une fonction comme un observable, je m'explique :

    Actuellement j'ai une fonction getDemande(date) qui contient elle même un appel à un autre observable qui me retourne des valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    getDemande(date){
       ... code ...
       this.service.getDatas(date).subscribe(
           res => { ... },
           error => { ... },
           () => { ... });
       ... autre code ...
    }
    Je voudrais appeler cette fonction de la même manière qu'un observable, pour pouvoir gérer le côté asynchrone.

    J'ai essayé ça mais ça ne fonctionne pas :

    définition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    getDemande(date): Observable<any>{
       ... code ...
       this.service.getDatas(date).subscribe(
           res => { ... },
           error => { ... },
           () => { ... });
       ... autre code ...
    }
    appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.getDemande(date).subscribe( () => {... traitement lors du retour ...});
    ça ne fonctionne pas car dans la définition de la fonction j'ai une erreur sur Observable<any> qui dit "A function whose declared type is neither Void or Any must return a value"

    c'est peut être très simple mais je ne suis pas un pro d'angular.
    Merci à vous

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2019
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2019
    Messages : 707
    Points : 1 030
    Points
    1 030
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    this.getDemande(date).subscribe( (res: any) => { 
        console.log(res);
        ... traitement lors du retour ...
    });
    ...
    ...
    getDemande(date): Observable<any>{
       return this.service.getDatas(date);
    }

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci pour ton retour, mais l'idée c'était justement de laisser tout le traitement dans la fonction getDemande plutôt que d'avoir à le faire plusieurs fois dans le composant avec l'appel this.getDemande(date).subscribe...

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    dans ce cas, pas besoin d'un observable, une promesse suffit !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    getDemande(date) {
       return new Promise((resolve, reject) => {
     
         ... code ...
         this.service.getDatas(date).subscribe(
           (res: any) => {
                   console.log(res);
                   const data =  ......traitement sur.... res
     
                   resolve(data);         // envoi la réponse
           },
           error => { 
              reject(error);
           },
           () => { ... });
     
      });
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.getDemande(date).then( (res: any) => { 
        console.log(res);
    });

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Merci Dukoid, effectivement ça fonctionne comme je le voulais.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déclarer une fonction avec deux inconnues
    Par a.ahmed dans le forum MATLAB
    Réponses: 6
    Dernier message: 27/02/2007, 09h43
  2. Déclarer une fonction ayant 2 prototypes dans une DLL
    Par Jayceblaster dans le forum Delphi
    Réponses: 8
    Dernier message: 17/02/2007, 12h00
  3. Déclarer une var comme boolean
    Par php_de_travers dans le forum Langage
    Réponses: 7
    Dernier message: 01/05/2006, 17h09
  4. [VB6]Une fonction comme Trim(), mais pour les "-"
    Par Jihnn dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 13/04/2006, 19h43
  5. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo