Question

J'ai une promesse que j'utilise pour manipuler des bases de données avec Mongoose.En utilisant la bibliothèque mpromise, je prends teamMatch et l'utiliser pour mettre à jour le Team document.Cependant, le programme ne fait rien au-delà de la ligne où je mets à jour le Team (commencez par var getTeamPromise).

Comment puis-je modifier ce code pour pouvoir faire plus facilement ce que j'ai décrit ci-dessus ?

saveTeamMatch.then(

    function saveTeamMatchToTeam(teamMatch) {

        console.log('TEAM_MATCH in SAVE to TEAM', teamMatch); //works

        // when a team is gotten and a teamMatch is made and saved
        // save the teamMatch to the team
        var getTeamPromise = Team.findOneAndUpdate( { id:1540 }, { $push:{ matches:teamMatch } } ).exec()

        .then(

            function successfullySaveTeamMatchToTeam(team) {
                console.log('TEAM in SUCCESSFUL SAVE', team);
                getTeamPromise.resolve();
            },

            function failToUpdateTeam(err) {
                console.error( err );
                getTeamPromise.resolve();
            }

        )

        .resolve(
            function endFindMatchPromise() {
                saveTeamMatch.end();
            }
        );
    },

    function failToSaveTeamMatch(err) {
        console.error(err);
        saveTeamMatch.end();
    }

);
Était-ce utile?

La solution

Il semble que vous ayez mal compris certaines choses à propos des Promesses :

Donné getTeamPromise.then(onResolve, onReject):

  • Dans onResolve et onReject, la promesse est déjà résolue/rejetée, vous ne pouvez donc pas modifier son état en appelant solve sur la même promesse.
  • Votre solve(function()) devrait être le résultat traité à partir du résultat du premier, puis
  • Normalement, vous ne devez pas manipuler l'état des promesses, et la plupart des méthodes que vous appelez sont des méthodes internes permettant de créer et de remplir des promesses.
  • Le renvoi d'une promesse à partir d'un gestionnaire onResolve redirigera cette promesse ou cette valeur vers le prochain then

Permettez-moi d'écrire ceci d'une manière (probablement) efficace :

saveTeamMatch.then(function saveTeamMatchToTeam(teamMatch) {
    console.log('TEAM_MATCH in SAVE to TEAM', teamMatch); //works
    // when a team is gotten and a teamMatch is made and saved
    // save the teamMatch to the team
    return Team
        .findOneAndUpdate({id:1540}, {$push:{matches:teamMatch}}).exec()
        .then(function successfullySaveTeamMatchToTeam(team) {
            console.log('TEAM in SUCCESSFUL SAVE', team);
            return team;
        }, function failToUpdateTeam(err) {
            console.error('failedToUpdateTeam', err);
        });
},function failToSaveTeamMatch(err) {
    console.error('saveTeamMatch failed', err);
})
.end();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top