gpt4 book ai didi

javascript - ForEach 不更新主数组

转载 作者:行者123 更新时间:2023-12-01 03:50:11 24 4
gpt4 key购买 nike

我正在尝试向数组的每个项目添加一些附加值。所以我有一个包含对象的数组,它们有:x、y 和 z 字段。然后,我想根据 http.get 调用的响应向数组中的每个对象添加其他项目。

主数组是:帖子

参见下面的代码:

router.get('/api/posts', function(req, res){

postModel.find({})
.limit(10)
.exec(function(err, posts) {
var options = {
host: 'localhost',
port: 3000,
path: '/user?id=12345678',
method: 'GET'
};
if(posts){
posts.forEach(function(post) {

var req = http.get(options, function(res) {
var bodyChunks = [];
res.on('data', function(chunk) {
bodyChunks.push(chunk);
}).on('end', function() {
var body = Buffer.concat(bodyChunks);
var parsedBody = JSON.parse(body);
post.fullname = parsedBody.user.fullname;
post.profilePic = parsedBody.user.profilePic;
});
});
});
res.json({
posts : posts
});
} else {
res.send('Post does not exist');
}
});
});

post.profilePic = parsedBody.user.profilePic 时 - profilePic 变量就在那里,但是当我通过 res 从 Node 获得响应时.json,附加值不是。

我在这里缺少什么?我一直在我的 Angular 前端使用这种方法,没有出现任何问题。

谢谢

最佳答案

这是一个非常常见的问题,您将异步代码视为同步代码。 http.get 不会立即完成,也不会阻止代码继续,因此 res.json 在请求完成之前被调用。有很多方法可以解决这个问题,我将发布我最喜欢的 - Javascript Promises .

// use map instead of forEach to transform your array
// of posts into an array of promises
var postPromises = posts.map(function(post) {
return new Promise(function(resolve) {
var req = http.get(options, function(res) {
var bodyChunks = [];
res.on('data', function(chunk) {
bodyChunks.push(chunk);
}).on('end', function() {
var body = Buffer.concat(bodyChunks);
var parsedBody = JSON.parse(body);
post.fullname = parsedBody.user.fullname;
post.profilePic = parsedBody.user.profilePic;
// resolve the promise with the updated post
resolve(post);
});
});
});
});

// once all requests complete, send the data
Promise.all(postPromises).then(function(posts) {
res.json({
posts: posts
});
});

关于javascript - ForEach 不更新主数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43290731/

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