Гнездовые обещания с мангустом
Вопрос
У меня есть обещание, что я использую для манипуляции баз данных с мангустом.Использование библиотеки 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();
. Не связан с StackOverflow