gpt4 book ai didi

javascript - 如何使用 expressjs 和 mongodb 使用 promise /回调?

转载 作者:行者123 更新时间:2023-11-30 15:10:57 25 4
gpt4 key购买 nike

我真的很困惑 promises 和异步 javascript 是如何工作的。我想在/user 上执行 GET 并查询 mongo,以便以某种方式处理第一个查询的结果以形成第二个查询的查询,并且该查询的结果是第三个查询的查询。

基本上我希望最终的mongo结果通过res.send(result)发送回客户端。

执行此操作的正确方法是什么,以便客户端通过第三个嵌套的 mongo 查询返回 200 OK 的结果?

app.get('/user', function (req, res, next) {

var query = {"isRegistered": false }

db.collection('users', function (err, collection) {
collection.find(query).toArray(function (err, result) {
if (err) {
console.log(err)
}
else {
if (result.length > 0) {
// do some random processing
var randomUser = result[Math.floor(Math.random() * result.length)]
// do ANOTHER db query
query = {"age": randomUser.age}
collection.find(query).toArray(function (err,result) {
if (err) {
console.log(err)
}
else {
// do some other logic ...
query = {something}
collection.find(query).toArray(function (err,result) {
if (err) {
console.log(err);
}
else {
// FINALLY RETURN THIS RESULT
res.send(result);
next()
}
})
}
})
}
}
});
});

最佳答案

假设您正在为 Node 使用常规的 Mongo 客户端,它已经返回查询的 promise ,这意味着您可以返回下一个查询并在 then 中捕获它,或者在以 catch 结束。

未经测试,但类似的东西应该可以工作

app.get('/user', function (req, res, next) {

var query = {"isRegistered" : false };
var collection = db.collection('users');

collection.find(query).toArray().then( result => {
var randomUser = result[Math.floor(Math.random() * result.length)];
var query2 = {"age" : randomUser.age};

return collection.find(query2).toArray();
}).then( result => {
var query3 = {something : 'something'};

return collection.find(query3).toArray();
}).then( result => {
res.status(200);
res.send(result);
}).catch( err => {
console.log(err);
res.status(500);
});
});

请注意,如果没有传递回调函数,toArray 等方法会自动返回一个 promise。

关于javascript - 如何使用 expressjs 和 mongodb 使用 promise /回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45121931/

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