gpt4 book ai didi

javascript - Node.js Promise 与 Mongoose

转载 作者:行者123 更新时间:2023-11-30 20:13:29 25 4
gpt4 key购买 nike

我在使用 Promise 时遇到困难。
我想从 mongodb 中的另一个表中获取数据。
但是我陷入了回调 hell ,所以我试图解决这个问题但我做不到。
我应该怎么办?结果是“未定义的”。

非常感谢,

let mongoose         = require('mongoose');
mongoose.Promise = global.Promise;

....

exports.Recommend = (id) => {
User.find({User_id: myId})
.then((result) => {
return Promise.resolve(result[0].age)
}).then(age => {
return new Promise((resolve,rejject)=>{
resolve(User.find()
.select('User_id')
.where('age').equals(age))
})
}).then((Users_id) => {
Users_id.forEach((user, idx, arr) => {
Count.find()
.select('board_id')
.where('User_id').equals(user.User_id)
.exec((err, items) => {
return new Promise((resolve,reject)=>{
resolve(
items.forEach((post, idx, arr) => {
posts.push(post.board_id)
}))
})
})
})
}).then(()=>{
console.log("posts:"+posts);
})
}

最佳答案

Avoid Promise.resolve ,避免使用 new Promise 构造函数,如 Promise.resolve,避免 Promise constructor antipattern , 和 avoid forEach ,并且不要忘记从您的函数中返回 promise 链:

exports.Recommend = (id) => {
return User.find({User_id: myId}).then(result => {
return User.find()
.select('User_id')
.where('age')
.equals(result[0].age));
}).then(user_ids => {
return Promise.all(user_ids.map((user, idx, arr) => {
return Count.find()
.select('board_id')
.where('User_id').equals(user.User_id)
.exec()
.then(posts => posts.map(post => post.board_id));
}));
}).then(board_ids => {
console.log("posts:"+board_ids);
})
}

关于javascript - Node.js Promise 与 Mongoose ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52165381/

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