3
Я использую библиотеку обещаний bluebird и пытаюсь извлечь данные из MongoDb, проблема в том, что функция выполняет обещание, прежде чем я получу данные из db. вот мой код для извлечения данных.prom.veolve()
function getCollection(collectionName) {
var p = database.listCollections().toArray(function(err, collInfos) {
if (err) return null;
for (var i = 0; i <= collInfos.length; i++) {
console.log('getdata');
if (collInfos[i].name === collectionName) {
return collInfos[i];
}
if (i === collInfos.length - 1) {
return null;
}
}
});
p = Promise.resolve(p).bind(p).then(function collection(res) {
console.log(res,'res');
return res;
});
return p; }
Когда этот код выполняется я получаю Undefine с «Рез» и «GetData» принтами впоследствии.
Это означает, что 'toArray' не возвращает обещание,' p' является неопределенным и 'Promise.resolve' не знает, что ждать. – Bergi
@ Bergi так как я могу вернуть обещание от 'toArray' с моим фактическим ответом i.e null или объект коллекции? –
[** 'toArray()' **] (http://mongodb.github.io/node-mongodb-native/2.2/api/Cursor.html#toArray) возвращает Promise, если нет обратного вызова. – chridam