2017-01-24 2 views
0

Я пытаюсь использовать Bluebird с мангуста. Вот моя реализация.Выполнение запросов mongoose работает с отражением bluebird

const Bluebird = require('bluebird'); 
const mongoose = require('mongoose'); 
const Entity = require('./entity'); 
mongoose.Promise = Bluebird; 

Теперь я пытаюсь сделать что-то подобное.

let promises = []; 
promises.push(Entity.findOne({ country: 'HONGKONG' })); 
promises.push(Entity.findOne({ country: 'INDIA' })); 
promises.push(Entity.findOne({ country: 'THAILAND' })); 

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

Теперь я пытаюсь реализовать Bluebirds отражать

return Bluebird.all(promises.map(function (promise) { 
    return promise.reflect(); 
})) 
    .then(response => { 
    console.log(response.filter(r => r.isFulfilled())); 
    console.log(response.filter(r => !r.isFulfilled())); 
    }).catch(err=>{ 
    console.log(err); 
    }) 

Я получаю ошибку promise.reflect is not a function

Но, когда я делаю это, он прекрасно работает.

promises.push(new Bluebird((resolve, reject) => resolve(Entity.findOne({ country: 'HONGKONG' })))); 
promises.push(new Bluebird((resolve, reject) => resolve(Entity.findOne({ country: 'INDIA' })))); 
promises.push(new Bluebird((resolve, reject) => resolve(Entity.findOne({ country: 'THAILAND' })))); 

Мой вопрос: почему мангуста не выполняет обещание обезьяны синих птиц нормально. Нужно ли явно разрешать каждый запрос с помощью Bluebird?

ответ

1

Я думаю, что это терпит неудачу, потому что .findOne() не возвращает Promise, а объект запроса. Вы должны добавить .exec() в конце.

Try:

let promises = []; 
promises.push(Entity.findOne({ country: 'HONGKONG' }).exec()); 
promises.push(Entity.findOne({ country: 'INDIA' }).exec()); 
promises.push(Entity.findOne({ country: 'THAILAND' }).exec()); 

Here у вас есть дополнительная информация о Promises в Мангуста. Также объясняется необходимость использования функции .exec().

+0

Спасибо. Он работал как шарм :) – logesh

+0

Добро пожаловать! –