Pregunta

Tengo una promesa que estoy utilizando para hacer manipulación de base de datos con la mangosta.El uso de la mpromise de la biblioteca, estoy tomando teamMatch y el uso de la actualización de la Team documento.Sin embargo, el programa no hace nada más allá de la línea donde puedo actualizar el Team (comience con var getTeamPromise).

¿Cómo puedo cambiar este código, por lo que es más fácil hacer lo que he descrito anteriormente?

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

);
¿Fue útil?

Solución

Parece que han entendido mal algunas cosas acerca de las Promesas:

Dado getTeamPromise.then(onResolve, onReject):

  • En onResolve y onReject la promesa ya está resuelto y rechazado, como tal, usted no puede alterar su estado llamando a resolver en la misma promesa
  • Su determinación(function()) debe ser procesada por el resultado de la resultado de la primera, a continuación,
  • Normalmente, usted no debe manipular el estado de promesas, y muchos de los métodos que se llaman métodos internos para crear y cumplir las promesas.
  • Devuelve una promesa de un onResolve controlador de la tubería que la promesa de valor o en la siguiente then

Permítanme escribir esto en un — probablemente — modo de trabajo:

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();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top