Nidificante promette con mangusta
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();
}
);
. 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