Как передать возвращаемое значение функции объекту в Node.js - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в Node.js и разрабатываю REST API для одного из моих проектов.

В этом случае у меня есть почтовый запрос, который должен сохранить некоторые данные формы в базе данных. Некоторые значения берутся из данных формы, а некоторые значения генерируются на основе значений этой формы. Например, на основе значения продолжительности необходимо рассчитать окончательные данные на основе этого значения. Если продолжительность составляет 3 месяца, окончательная дата должна измениться в зависимости от текущей даты. Если значение продолжительности составляет один год, окончательная дата должна быть изменена на основе продолжительности с текущей датой.

Я разработал функцию с именем releasefinaldate (), чтобы получить дату, но я не могу передать это значение функции в Object , Как я могу передать это значение в Object Object? Пожалуйста, помогите ..

router.post('/', (req, res, next)=>{

const articles = new Articles({

    //articleId: new mongoose.Types.ObjectId(),
    first_name: req.body.first_name,
    last_name: req.body.last_name,
    address: req.body.address,
    id_number: req.body.id_number,
    phone_number: req.body.phone_number,
    amount: req.body.amount,
    weight: req.body.weight,
    duration: req.body.duration,
    addtional_details: req.body.addtional_details,   
    interest_paid: req.body.interest_paid,
    speacial_circumstances: req.body.speacial_circumstances,
    released_date: req.body.released_date,
    released_amount: req.body.released_amount,
    date: moment().format('MMMM Do YYYY, h:mm:ss a'),
    released_final_date: releasedfinaldate(req.body.duration)

});


function releasedfinaldate(duration) {
    const oneyear = moment().add(365, 'days').calendar();
    const threemonths = moment().add(90, 'days').calendar();
    const released_final_date= null;
    if (duration === 1) {
        return oneyear
    } else if (duration === 3) {
        return threemonths
    }  
}
//console.log(releasedfinaldate(3))
articles.save()
.then(result =>{
    console.log(result);
})
.catch(err => console.log(err));
res.status(200).json({
    message:'New Article successfully created.',
    createdArticle: articles
});

}); `

1 Ответ

0 голосов
/ 15 апреля 2020

Каким-то образом вашей функции даты требуется некоторое время, чтобы вернуть значение даты, и в то же время должна выполняться следующая инструкция. По этой причине ваша функция возвращает undefined.

Никогда не забыл NodeJS выполняет оператор асинхронно.

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

Я протестировал этот фрагмент в repl.it.

Я не говорю, что выполнил мой код с наиболее квалифицированным способом, но я дал вам решение, что вы должны использовать этот тип аналогичного способа для синхронного выполнения.

Вы должны также asyn c .. ждать вместо обещания.

const moment = require('moment');

function generateObject(releasedfinaldate) {
  return new Promise((resolve) => {
    const articles = {
      first_name: "first_name",
      last_name: "last_name",
      address: "address",
      id_number: "id_number",
      phone_number: "phone_number",
      amount: "amount",
      weight: "weight",
      duration: "duration",
      addtional_details: "res",
      interest_paid: "interest_paid",
      speacial_circumstances: "speacial_circumstances",
      released_date: "released_date",
      released_amount: "released_amount",
      date: moment().format('MMMM Do YYYY, h:mm:ss a'),
      released_final_date: releasedfinaldate
    };
    resolve(articles);
  });

}

function releasedfinaldate(duration) {
  return new Promise((resolve) => {
    const oneyear = moment().add(365, 'days').calendar();
    const threemonths = moment().add(90, 'days').calendar();
    const released_final_date = null;
    if (duration === 1) {
      return resolve(oneyear);
    } else if (duration === 3) {
      return resolve(threemonths)
    }
  });
}

releasedfinaldate(3)
  .then((releasedfinaldate) => {
    console.log(releasedfinaldate);
    return generateObject(releasedfinaldate)
  }).then((article) => {
    console.log(article);
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...