Обновить дважды в одной функции - пн goose Node.js - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь создать систему, которая обновляет массив платежей, а затем запускает серию функций разрешения для описания платежей клиентов и сохранения этих данных в их модели. Итак, есть массив paymentSchedule и объект paymentStatus. Каждый раз, когда я обновляю массив платежей, мне нужно запускать эту серию команд и обновлять статус. Некоторые вещи, которые я делаю, уже вроде как работают, но есть сбои и зацепки, поэтому мне нужен был метод, который можно было бы повторить, или просто лучшая практика в такой ситуации, которую я мог бы использовать для остальных моих уравнений. Вот примеры того, что я пробовал. (в основном мне нужно 2 findbyidandupdates или как-то еще, чтобы измерить эффективное изменение)

router.put("/:_id/paymentSchedule", auth, async (req, res) => {
  const quoteArray = req.body.map(function (payment) {
    return parseInt(payment.paymentAmount);
  });

  const paymentsLeft = req.body.length;

  const reducer = (accumulator, currentValue) => accumulator + currentValue;
  const quote = quoteArray.reduce(reducer);

  const paymentStatus = {
    quote,
    paymentsLeft,
  };

  let prospect = await Prospect.findByIdAndUpdate(req.params._id, {
    "$push": { "paymentSchedule": req.body },
    "$set": { "paymentStatus": paymentStatus },
  });

  res.json(prospect);

  console.log(prospect);
});


vs

  try {
    let prospect = await Prospect.findByIdAndUpdate(req.params._id, {
      $pull: { "paymentSchedule": { "_id": req.query.q } },
    });

    prospect.save();

    prospect = await Prospect.findById(req.params._id);

    const { paymentSchedule } = prospect;
    const quoteArray = paymentSchedule.map(function (payment) {
      return parseInt(payment.paymentAmount);
    });

    const paymentsLeft = paymentSchedule.length;

    const reducer = (accumulator, currentValue) => accumulator + currentValue;
    const quote = quoteArray.reduce(reducer);

    const paymentStatus = {
      quote,
      paymentsLeft,
    };

    let prospect2 = await Prospect.findByIdAndUpdate(req.params._id, {
      $set: { "paymentStatus": paymentStatus },
    });

    res.json(prospect2);
  } catch (err) {
    console.error(err.message);
    res.status(500).send("Server Error");
  }
});

vs


  const updatePayment = async (payment, currentClient, payid) => {
    const config = {
      headers: {
        "Content-Type": "application/json",
      },
      params: {
        _id: currentClient,
      },
    };

    const payobj = { payid };

    const res = await axios.put(
      `/api/prospects/${currentClient}/paymentSchedule/${payment._id}/paymentId`,
      payobj,
      config
    );

    dispatch({
      type: UPDATE_PAYMENTSTATUS,
      payload: res.data,
    });

    getPayments(currentClient);
  };

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...