Вопрос

У меня есть обещание, что я использую для манипуляции баз данных с мангустом.Использование библиотеки MPROMISE я принимаю teamMatch и используя его для обновления документа Team.Тем не менее, программа ничего не делает мимо линии, где я обновляю Team (начните с var getteampromise).

Как изменить этот код, чтобы я мог проще сделать то, что я описал выше?

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

);
.

Это было полезно?

Решение

Кажется, вы неправильно поняли некоторые вещи о обещаниях:

Дано getTeamPromise.then(onResolve, onReject):

    .
  • в onresolve и Onreject Обещание уже решено / отклонено, как таковой вы не можете изменить его состояние, позвонив в разрешению на то же обещание
  • Ваша разрешение (функция ()) должна быть обработанным результатом из результата первого затем
  • Обычно вы не должны манипулировать состоянием обещаний, а множество методов, которые вы называете, являются внутренними методами создания и полных обещаний.
  • Возвращение обещания от обработчика onresolve будет трусить это обещание или значение в следующий генеракодицетагкод

Позвольте мне написать это в - наверное - работающий способ:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top