Пытаюсь сделать сначала один запрос к 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)
})
})
}
Решил так:
/* Находим одну статью */
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]
})
})
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости