Domanda

Ho una promessa che sto usando per fare la manipolazione del database con mangusta.Utilizzando la libreria mpromise, sto prendendo teamMatch e lo usiamo per aggiornare il documento Team.Tuttavia, il programma non fa nulla oltre la linea in cui aggiorno il Team (inizia con Var GetTeamprompromise).

Come posso cambiare questo codice in modo che io possa fare più facilmente ciò che ho descritto sopra?

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

);
.

È stato utile?

Soluzione

Sembra che tu abbia frainteso alcune cose sulle promesse:

Dato getTeamPromise.then(onResolve, onReject):

    .
  • in onresolve e onreject La promessa è già stata risolta / respinta, in quanto tale non è possibile modificare il suo stato chiamando la risoluzione sulla stessa promessa
  • La tua risoluzione (funzione ()) dovrebbe essere il risultato elaborato dal risultato del primo allora
  • Normalmente non si dovrebbe manipolare lo stato delle promesse e molti dei metodi che chiami sono metodi interni per la creazione e le promesse complesse.
  • Restituire una promessa da un gestore di onresolve si tubo da promuovere o valore nel successivo then

Lascia che lo scrivi in A - probabilmente - way working:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top