Краткий ответ: как уже отмечалось, участники, объявленные с const
, не могут быть переназначены.
Длинный ответ: вы выиграете от лучшей стратегии для доступа к предыдущим результатам обещания в цепочке .then ()
С ссылкой на связанную тему вы используете "не элегантное и довольно ошибочное" изменяемое контекстное состояние .
Вы могли бы рассмотреть один из других подходов:
- Закрывающие (и) замыкания
- Разорвать цепь
- Явная передача
Например, Вложенные (и) замыкания даст вам что-то вроде этого:
router.post('/delevery_request', passport.authenticate('jwt', { 'session': false }), (req, res) => {
XProfile.findOne({ 'user': req.user.id })
.then(xProfile => {
return AvaiablexForX.findOne({ 'isX': false })
.then(avaiablexForX => {
return new RequestxY({
'isAccepted': false,
'xId': xProfile._id,
'xToBeDonateId': avaiablexForX._id
}).save();
})
.then(requestForxY => {
xProfile.requestedxDeleivery.unshift(requestForxY._id);
return xProfile.save();
});
})
.then(() => res.json({ 'success': true }))
.catch(err => {
res.status(404).json({
'success': false,
'err': err
});
});
});
Из-за закрытия xProfile
доступно для первого и второго вложенных .then()
.
То, что было requestInputFields
, составлено на лету, где оно используется.
Вы теряете хорошую плоскую линию из (), но выигрываете, не нуждаясь в куче грязных внешних членов.