gpt4 book ai didi

javascript 变量未在节点中更新

转载 作者:行者123 更新时间:2023-11-28 02:09:03 25 4
gpt4 key购买 nike

rows是数组,row是对象,我想给row添加一个属性;我尝试了以下方法:

rows.forEach(function(row) {
User.find(row.owner).success(function(user) {
row.ownername = user.username;
});
});
console.dir(rows);

但是行没有加入ownername属性,输出仍然是[],我错过了什么吗?如有任何帮助,我们将不胜感激。

抱歉,我说不清楚,rows是数组,如:

[{"id":19427,"name":"data1","owner":123},
{"id":19427,"name":"data2","owner":123},
{"id":19427,"name":"data3","owner":123},
{"id":19427,"name":"data4","owner":123}]

row代表行的一个元素,如

{"id":19427,"name":"data2","owner":123}

我只想向行添加一个属性,最后像这样的行

[{"id":19427,"name":"data1","owner":123,"ownername":"a"},
{"id":19427,"name":"data2","owner":123,"ownername":"ab"},
{"id":19427,"name":"data3","owner":123,"ownername":"abc"},
{"id":19427,"name":"data4","owner":123,"ownername":"abcd"}]

最佳答案

Node.js 是异步的。

无法保证 console.dir(rows) 在 User.find(...).success(...) 更新 rows 变量之前或之后执行。

作为一个实际问题,假设 User.find() 查询数据库或磁盘文件,并且需要 200 毫秒或 1/5 秒才能得到答案。这也可能是永远的。节点在 for 循环中对所有这些用户信息请求进行排队。在最初发布的代码中,发送这些请求后,它立即将行变量的当前值发送到控制台。 但这还为时过早。需要等待。

如果console.dir在User.find(...).success(...)之前执行,那么程序将打印行的未修改值。

User.find(...).success(...) 仅设置在未来某个未知时刻更新行的可能性。此代码通常应解释为“查找用户,找到用户时,执行成功函数”。

此外,我不知道对 User... 的调用是否正确或足以在此 User api 或后端上执行查询,或者该代码中是否存在错误。

尝试一下,看看它是否会产生更合理的结果:

rows.forEach(function(row) {
User.find(row.owner).success(function(user) {
console.log("changing row.ownername from "+row.ownername);
row.ownername = user.username;
console.log("to "+user.username+" -- result "+row.ownername);

});
});
console.dir(rows);
setTimeout(function(){ console.dir(rows); }, 10000); // 10 sec delay

关于javascript 变量未在节点中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17375672/

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