gpt4 book ai didi

Node.js promise 与 mongoskin

转载 作者:IT老高 更新时间:2023-10-28 13:35:30 27 4
gpt4 key购买 nike

我试图在进行 mongodb 查询时避免使用回调。我正在使用 mongoskin 来调用电话:

req.db.collection('users').find().toArray(function (err, doc) {
res.json(doc);
});

在许多情况下,我需要进行多个查询,因此我想使用 Node.js 的 promise 库,但我不确定如何将这些函数包装为 promise。我看到的大多数示例对于 readFile 之类的东西都是微不足道的,我猜在这种情况下我需要以某种方式包装 toArray?这可以做到还是必须由 mongoskin 实现?

一个例子可以是任何一组回调,find/insert、find/find/insert、find/update:

req.db.collection('users').find().toArray(function (err, doc) {
if (doc) {
req.db.collection('users').find().toArray(function (err, doc) {
// etc...
});
}
else {
// err
}
});

最佳答案

您可以像使用 bluebird 一样 promise 整个模块:

var Promise = require("bluebird");
var mongoskin = require("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);

这只需要在您的应用程序中的一个地方进行一次,而不是在您的应用程序代码中的任何地方。

之后,您只需正常使用方法,除了带有 Async 后缀的方法,并且不传递回调:

req.db.collection('users').find().toArrayAsync()
.then(function(doc) {
if (doc) {
return req.db.collection('users').find().toArrayAsync();
}
})
.then(function(doc) {
if (doc) {
return req.db.collection('users').find().toArrayAsync();
}
})
.then(function(doc) {
if (doc) {
return req.db.collection('users').find().toArrayAsync();
}
});

同样,如果你调用像

这样的函数
foo(a, b, c, function(err, result) {
if (err) return console.log(err);
//Code
});

返回 promise 的版本被称为:

fooAsync(a, b, c).then(...)

( Uncaught Error 会自动记录,因此如果您只是要记录它,则无需检查它们)

关于Node.js promise 与 mongoskin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23687538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com