-1
votes

Promises: méthodes de chaîne et travail avec les deux objets retournés?

J'ai ce code: xxx

et je veux appeler une autre méthode, entité.tag.getallforuserer , qui renvoie une balises < / Code> Liste.

(Mise à jour: J'ai besoin de le faire en utilisant des promesses seulement - je ne peux pas utiliser async / attendre.)

Ce code ne fonctionne pas - il dit que ce code ne fonctionne pas Les deux list et étiquette sont indéfinis: xxx

J'ai également essayé de enchaîner le deuxième appel sur le premier: < / p> xxx

mais encore une fois, il dit que Liste est indéfini. Qu'est-ce que fonctionne


4 commentaires

Pourquoi avez-vous plusieurs retours?


@chevybow parce que je le fais mal.


Votre titre dit «Méthodes de chaîne», mais pourquoi auriez-vous besoin enchaînant du tout?


@Trincot peut-être je ne le fais pas! J'ai besoin d'exécuter les deux et d'utiliser les résultats des deux. Désolé de ne pas être plus précis.


4 Réponses :


-1
votes

Répondre à ma propre question. S'il vous plaît ne supprimez pas, car cela pourrait être utile pour quelqu'un d'autre!

return (entity.User.getProjects(req.user.id, ....))
    .then((list) => Promise.all([list, entity.Tag.getAllForUser(req.user.id)]))
    .then(([list, tags]) => {
        // party with both list and tags objects!
        return {
            list: list,
            tags: tags
        }
}


1 commentaires

Je recommande d'utiliser promess.all pour exécuter les deux requêtes en même temps! Votre solution ici va inutilement des choses en série.



0
votes

simplement utiliser simplement async / attendre xxx

si vous ne pouvez pas utiliser async / attendre (même si je vous recommande de les utiliser ) Vous pouvez utiliser la promesse.Tous xxx


2 commentaires

Merci! Ce serait le moyen le plus simple, mais malheureusement, je ne peux pas faire cela, car le codebase que je travaille ne le permet pas. (Avez-vous mis à jour la question pour clarifier cela.)


@Richard Vous pouvez utiliser promess.all même si je recommanderai toujours d'utiliser asyc / attendre qui rend le code plus lisible et facile à entretenir.



0
votes

La meilleure solution ici est promess.all , qui prend une liste de promesses et renvoie une liste des valeurs résolues: xxx

recommandation obligatoire à utiliser async et attendre : xxx


0 commentaires

0
votes

Cela dépend des demandes que vous êtes indépendants ou non:

obtenir plusieurs valeurs résolues sur des demandes indépendantes:

disons que j'ai getUSers () < / Code> et GetCenties () , et les deux sont indépendants (vous n'avez pas besoin des utilisateurs pour obtenir les villes et les vexives). Alors vous pouvez utiliser promess.all : xxx

obtenir plusieurs valeurs résolues sur les demandes dépendantes:

Si vous en avez, dites, getuserer () , qui renvoie un utilisateur, puis getcouple (utilisateur) , qui renvoie une personne liée à un utilisateur, puis gethouse (user1, User2) , ce qui a besoin de besoin d'entre eux, vous pouvez procéder comme suit: xxx

Cela devient beaucoup plus agréable avec async / attendre: xxx


1 commentaires

Merci! C'est l'explication la plus rapide que j'ai vue n'importe où :)