Один ко многим не спасает ответа (обещания) - PullRequest
0 голосов
/ 17 сентября 2018

Я застрял, сохраняя объект с массивом идентификатора объекта.Я использую node.js с restify и mongoose.

У меня есть запрос снаряжения со многими вариантами снаряжения:

Модель:

const outfitRequestsSchema = new mongoose.Schema({
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  },
  title: {
    type: String
  },
  maxCost: {
    type: Number
  },
  outfitChoices: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'OutfitChoice'
  }]
}, {usePushEach: true});

Маршрутизатор:

application.post('/outfit-choices', (req, resp, next) => {
      OutfitRequest.findById(req.body.outfitRequest)
        .then(outfitRequest => {
          console.log(outfitRequest);
          const outfitChoice = new OutfitChoice(req.body);
          outfitChoice.save().then(outfitChoice => {
            outfitRequest.outfitChoices.push(outfitChoice._id);
            outfitRequest.save()
              .then(outfitRequestNew => {
                console.log(outfitRequestNew);
                this.render(resp, next);
              })
              .catch(next);

          }).catch(next);

        })
        .catch(next);
    });

Метод визуализации:

render(response: restify.Response, next: restify.Next) {
    return (document) => {
      if (document) {
        this.emit('beforeRender', document);
        response.json(document);
      } else {
        response.send(404);
      }

      return next();
    }
  }

Экран перезагрузки

Он остается в цикле, но запись сохраняется на экране БД

БД

Я думаю, что это проблема с связанными обещаниями, но я не могу 'не узнать, как решить эту проблему.

1 Ответ

0 голосов
/ 17 сентября 2018

Я получил это так, я вернул последнее обещание и положил print в .then

 application.post('/outfit-choices', (req, resp, next) => {
          OutfitRequest.findById(req.body.outfitRequest)
            .then(outfitRequest => {
              const outfitChoice = new OutfitChoice(req.body);
              outfitChoice.save()
                .then(outfitChoice => {
                outfitRequest.outfitChoices.push(outfitChoice._id);
                return outfitRequest.save()
              })
            .then(this.render(resp, next))
            .catch(next);

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