Это ничего не меняет вообще?
словно пропустить обещание и ничего не делать. Я создал вложенное обещание, по которому у меня есть 7 .then. Но условно, мне нужно пропустить несколько .путем и ничего не делать в этом блоке, как этого добиться?
Мой полный код:
const admin = require('firebase-admin');
const rp = require('request-promise');
module.exports = function(req, res) {
const phone = String(req.body.phone).replace(/[^\d]/g, '');
const amount = parseInt(req.body.amount);
const couponCodeName = (req.body.couponCodeName);
const couponUsage = parseInt(req.body.couponUsage);
const usersCouponUsage = parseInt(req.body.usersCouponUsage);
const finalAddress = (req.body.finalAddress);
const planName = (req.body.planName);
const saveThisAddress = (req.body.saveThisAddress);
const orderNumber = (req.body.orderNumber);
const pay_id = (req.body.pay_id);
const options = {
method: 'POST',
uri:`https://..........`,
body: {
amount
},
json: true
};
return admin.auth().getUser(phone)
.then(userRecord => {
return rp(options)
})
.then((orderResponse) => {
return admin.database().ref('trs/'+ phone)
.push({ pay_id: orderResponse.id })
})
.then(() => {
return admin.database().ref('ors/'+ phone)
.push({ pay_id })
})
.then(() => {
return saveThisAddress === true ?
admin.database().ref('address/'+phone)
.push({address: finalAddress}) : null
})
.then(() => {
return admin.database().ref('deliveryStatus/'+phone+'/'+orderNumber)
.set({ plan: planName === "" ? "Single Day Plan" : planName, delivered: false}, () => {
res.status(200).send({ success:true })
})
})
.then(() => {
return couponCodeName === "" ? null :
admin.database().ref(`couponCodes/${couponCodeName}`)
.update({couponUsage: couponUsage + 1 })
})
.then(() => {
return usersCouponUsage === "" ? null :
admin.database().ref(`couponUsage/${phone}`)
.update({ [couponCodeName]: usersCouponUsage + 1 })
})
.catch((err) => {
res.status(422).send({ error: err })
})
.catch((err) => {
res.status(422).send({error: err });
});
}
Из приведенного выше кода последние два .then имеет условие return couponCodeName === ""? null: код ...)}.
Чего мне нужно добиться, так это то, что когда couponCodeName === "" тогда, он должен пропустить блок .then и ничего не делать Но, я возвращаю ноль в этом, это бросает необработанную ошибку отклонения. Так как этого добиться? Как пропустить .then и ничего не делать (важно ничего не делать, просто пропустить) Как это сделать?
ОШИБКА, КОТОРУЮ Я ПОЛУЧАЮ Ошибка, которую я получаю из этих вложенных файлов .then: «Необработанный отказ» и «Ошибка: невозможно установить заголовки после их отправки».
Ошибка из Google Cloud Function
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:369:11)
at ServerResponse.header (/var/tmp/worker/node_modules/express/lib/response.js:767:10)
at ServerResponse.send (/var/tmp/worker/node_modules/express/lib/response.js:170:12)
at ServerResponse.json (/var/tmp/worker/node_modules/express/lib/response.js:267:15)
at ServerResponse.send (/var/tmp/worker/node_modules/express/lib/response.js:158:21)
at admin.auth.getUser.then.then.then.then.then.then.then.catch.catch (/user_code/request_payment_details.js:86:28)
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
А также
Unhandled rejection
Примечание: версия узла Js: 6 (так что я думаю, что официально, я не могу использовать async и ждать)