Запрос в запросе в mongoose.js и Promise

200
02 октября 2017, 03:03

Пытаюсь сделать сначала один запрос к mongo, потом другой на основе результата предыдущего запроса, и выдать результат.

Не работает, в чем ошибка?

export function getArticle(id) {
  var field = {}
  if(mongoose.Types.ObjectId.isValid(id)){
    field['_id'] = id
  } else field['slug'] = id
  return new Promise(function(resolve, reject){
    Article.findOne(field)
    .then(function(article) {
      User.findOne({_id: article.author})
      .then(function(author) {
        article.author = author.username
          return Promise.resolve(article)
        })
        .catch(function(err){
          return Promise.reject(err)
        })
      })
      .catch(function(err){
        return Promise.reject(err)
      })
  })  
}
Answer 1

Решил так:

/* Находим одну статью */
export function getArticle(id) {  
  return (function(){
    return new Promise(function(resolve, reject){
      var field = {}
      if(mongoose.Types.ObjectId.isValid(id)){
        // если в slug есть признаки objectId ищем так же в slug
        field = { $or: [ {_id: id}, {slug: id} ]}
        resolve(field)
      } else {
        field['slug'] = id
        resolve(field)
      }  
    })
  })()
  .then(function(field){
    return Article.findOne(field).exec()  
    .then(function(article) {
      // если есть статьи not null
      if(article){
        var result = []
        return User.findOne({_id: article.author}).exec()
        .then(function(author){
          author = author || {username: "deleted"}
          return [article, author]
        })
      } else return Promise.reject("article not find")
    })
    .then(function(result) {
      result[0].author = result[1].username
      return result[0]
    })
  })
}
READ ALSO
Как защитить html сайт с парой скриптов? [требует правки]

Как защитить html сайт с парой скриптов? [требует правки]

Я школьник, говорю прямым текстом, начал учить htmlНаписал простой сайт с использованием одного маленького скрипта, хосчу его на своем компьютере

861
Скроллинг transform translateY и кроссбраузерная плавность

Скроллинг transform translateY и кроссбраузерная плавность

Задача у меня была следующая: есть несколько слайдов с вертикальным перелистыванием при помощи нативного скроллинга браузераТекущий активный...

219
Что означает запись !!arr.indexOf('green')

Что означает запись !!arr.indexOf('green')

Конкретно с indexOf() это сомнительная идеяПоскольку !!arr

219