Frage

Ich habe ein Versprechen, das ich verwende, um Datenbankmanipulationen mit Mungo durchzuführen.Ich verwende die MPROMISE-Bibliothek teamMatch und es zum Aktualisieren verwenden Team dokumentieren.Allerdings führt das Programm über die Zeile hinaus, in der ich das aktualisiere, nichts mehr aus Team (beginnen Sie mit var getTeamPromise).

Wie ändere ich diesen Code, damit ich das, was ich oben beschrieben habe, einfacher ausführen kann?

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();
    }

);
War es hilfreich?

Lösung

Anscheinend haben Sie einige Dinge über Promises falsch verstanden:

Gegeben getTeamPromise.then(onResolve, onReject):

  • In onResolve und onReject ist das Versprechen bereits aufgelöst/abgelehnt, daher können Sie seinen Status nicht ändern, indem Sie „resolve“ für dasselbe Versprechen aufrufen
  • Ihre Auflösung (Funktion ()) sollte das verarbeitete Ergebnis aus dem Ergebnis der ersten sein
  • Normalerweise sollten Sie den Status von Versprechen nicht manipulieren, und viele der von Ihnen aufgerufenen Methoden sind interne Methoden zum Erstellen und Erfüllen von Versprechen.
  • Durch die Rückgabe eines Versprechens von einem onResolve-Handler wird dieses Versprechen oder dieser Wert an den nächsten weitergeleitet then

Lassen Sie mich dies – wahrscheinlich – auf eine funktionierende Weise formulieren:

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top