【发布时间】:2016-10-11 20:58:13
【问题描述】:
我是 Promise 的新手,我正在尝试像 mongoose 一样返回 Promise 的值,但使用的是 mongoskin 和 bluebird。这适用于猫鼬return User.find().then(users => users)。这将返回用户列表,而不是 apollo-server 解析器中的承诺。
我尝试过承诺生成器和异步,但没有成功。从我读过的内容来看,一个承诺总是返回一个承诺,所以不知道猫鼬是如何返回一个值的。
mongodb.js
import Promise from 'bluebird';
import mongoskin from 'mongoskin';
Object.keys(mongoskin).forEach(function (key) {
var value = mongoskin[key];
if (typeof value === 'function') {
Promise.promisifyAll(value);
Promise.promisifyAll(value.prototype);
}
});
Promise.promisifyAll(mongoskin);
export default {
connect (uri) {
return mongoskin.db(uri, {native_parser:true});
}
};
users.js
import mongodb from '../../databases/mongodb';
export default class User {
constructor () {
this.db = mongodb.connect('mongodb://127.0.0.1:27017/test', {native_parser:true});
this.collection = this.db.collection('users');
}
find (query = {}, options = {}) {
const findAsync = () => {
return Promise.resolve().then(() => {
return this.collection.findAsync(query, options);
})
.then((xx) => {
xx.toArray((err, items) => {
if (err) return err;
return items;
});
});
};
async function getData () {
let foo = await findAsync();
return foo;
}
return getData();
}
}
const user = new User();
function bar () {
return user.find().then(x => console.log(x));
}
console.log(bar());
【问题讨论】:
-
User.find().then(users => users)确实返回一个承诺。 -
这可能是因为我将它与 apollo-server 一起使用。我将编辑问题
标签: javascript promise bluebird