gpt4 book ai didi

node.js - 如何让一段代码同步工作

转载 作者:太空宇宙 更新时间:2023-11-04 02:53:48 25 4
gpt4 key购买 nike

这是我的代码:

server.get(url_prefix + '/user/:user_id/photos', function(req, res, next) {
if (!req.headers['x-session-id']) {
res.send({
status: {
error: 1,
message: "Session ID not present in request header"
}
})
} else {
User.findOne({
session_id: req.headers['x-session-id']
}, function(err, user) {
if (user) {
var user_id = req.params.user_id
Album.find({userId : user_id})
.populate('images')
.exec(function (err, albums) {
if (albums) {
albums.forEach(function(album, j) {
var album_images = album.images
album_images.forEach(function(image, i) {
Like.findOne({imageID : image._id, userIDs:user._id}, function(err,like){
if(like){
albums[j].images[i].userLike = true;
}
})
})
})
return res.send({
status: {
error: 0,
message: "Successful"
},
data: {
albums: albums
}
})
} else
return notify_error(res, "No Results", 1, 404)
})
}
else {
res.send({
status: {
error: 1,
message: "Invalid Session ID"
}
})
}
})
}
})

我正在尝试向我的图像数组添加一个额外的值 (albums[j].images[i].userLike = true;),该数组位于相册数组内。

问题是return res.send({在我们从foreach获得响应之前发送数据

如何才能使其工作,以便仅在 foreach 完成所有迭代后才发生 return

最佳答案

您必须等待调用 res.send,直到获取每个相册中所有图像的所有点赞。例如

var pendingImageLikes = album_images.length;
album_images.forEach(function(image, i) {
Like.findOne({imageID : image._id, userIDs:user._id}, function(err,like){
if (like) {
albums[j].images[i].userLike = true;
}
if (!--pendingImageLikes) {
// we fetched all likes
res.send(
// ...
);
}
});

您可能需要 album_images.length === 0 的特殊情况。

此外,这并没有考虑到您有多个相册,每个相册都有多个图像。您必须以非常相似的方式延迟 res.send 才能使其真正起作用。您可能需要考虑使用流量控制库,例如 first (或者您的任何其他偏好,只需搜索“流量控制库”)以使这变得更容易。

此外,您可能需要考虑不依赖分号插入并手动键入分号。它可以防止出现歧义的表达式并使代码更易于阅读。

关于node.js - 如何让一段代码同步工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20375763/

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