gpt4 book ai didi

javascript - 如何处理 Express Js 回调以及如何更新函数内的对象属性?

转载 作者:行者123 更新时间:2023-12-03 01:28:10 27 4
gpt4 key购买 nike

我有两个js文件。我可以通过调用 bookDao.getActiveBookByCategoryId() 从 mongodb 获取数据。

我的问题

在categoryDao.js文件中,我试图更新BookDao.getActiveBookByCategoryId()方法内的resultJson.book_count。但它没有更新。所以我可以知道如何解决这个问题吗?这里 resultJson 中的 book_count 属性仍然是 0。

categoryDao.js

module.exports.getAllActiveCategory = (callback) => {
Category.find({
is_delete : false
}, (error, result) => {
if(error) {
console.log(error);
callback(commonUtil.ERROR);
}

if(result) {
var categoryArray = [];
for(var i=0; i<result.length; i++) {
var categorySingle = result[i];
var resultJson = {
_id : categorySingle._id,
category_name : categorySingle.category_name,
created_on : categorySingle.created_on,
book_count : 0
}

BookDao.getActiveBookByCategoryId(categorySingle._id, (bookResult) => {
if(bookResult) {
if(bookResult.length > 0) {
resultJson.book_count = bookResult.length;
}
}
});
categoryArray.push(resultJson);
}
callback(categoryArray);
}
});
}

bookDao.js

module.exports.getActiveBookByCategoryId = (categoryId, callback) => {
Book.find({
is_delete : false,
category : categoryId
}, (error, result) => {
if(error) {
console.log(error);
callback(commonUtil.ERROR);
}

if(result) {
callback(result);
}
});
}

最佳答案

试试这个,在您的代码中 categoryArray.push(resultJson); 由于异步行为,不会等待 BookDao.getActiveBookByCategoryId 完成。

module.exports.getActiveBookByCategoryId = (categoryId) => {
return Book.count({
is_delete: false,
category: categoryId
});
}


module.exports.getAllActiveCategory = async () => {
try {
// Find all category
const result = await Category.find({
is_delete: false
});

// Create array of promise
const promises = result.map(categorySingle => BookDao.getActiveBookByCategoryId(categorySingle._id));
// Get array of Category count
const data = await Promise.all(promises);
// update count in result
return result.map((categorySingle, i) => {
categorySingle.book_count = data[i];
return categorySingle;
});
} catch (error) {
console.log(error);
}
}

关于javascript - 如何处理 Express Js 回调以及如何更新函数内的对象属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51414585/

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