javascript - 为什么我没有向存在对象添加新的键和值?
问题描述
我有一个迭代它的跟随对象,我可以添加一个新的键和值,但是当我必须进行数据库搜索并获取每个结果并添加为新的键 + 值不起作用时,Eslint 点 a Assignment to property of function parameter 'object'.eslintno-param-reassign
,下面是不进行数据库搜索的示例。
const obj = {
Cod: 43453,
Informations: [
{
codPay: 802112,
value: 80
},
{
codPay: 802113,
value: 80
},
{
codPay: 802114,
value: 80
},
{
codPay: 802115,
value: 80
},
{
codPay: 802116,
value: 80
},
{
codPay: 802117,
value: 80
},
{
codPay: 802118,
value: 80
},
{
codPay: 802119,
value: 80
}
],
status: 'OK'
}
obj["Informations"].forEach((f,index) => {
f.more_info = index
})
console.log(obj)
通过进行数据库搜索:
obj["Informations"].forEach(asyn(f) => {
const result = db.any("Select info From table where cod $1",f.codPay")
f.more_info = result[0].info
})
通过打开这个db.any
值是正确的,但我不能添加新的密钥,我错过了哪里?
解决方案
该no-param-reassign
规则用于警告您,改变参数可能会在代码的其他地方造成不良影响。例如,代码的某些其他部分可能依赖于假设每个Informations
子对象仅包含codPay
和value
属性,而没有其他内容(无more_info
属性)。如果存在此类代码,则添加more_info
属性可能会导致该代码停止工作。
一个不错的选择是使用.map
, 创建全新的对象,而不是改变原来的对象。这将修复 linter 警告。
另一个问题是它看起来像db.any
返回一个 Promise,在这种情况下你应该先等待它解决。要在循环中执行此操作,请使用Promise.all
等待数组中的所有 Promise 解析。
const informationsWithMoreInfo = await Promise.all(
obj.Informations.map(
obj => db.any("Select info From table where cod $1", obj.codPay)
.then(result => ({ ...obj, more_info: result[0].info }))
)
);
// do stuff with informationsWithMoreInfo
要await
使其正常工作,请确保包含函数是async
- 或者调用.then
Promise。
推荐阅读
- spring - Spring Boot logback-spring.xml 不记录应用程序日志
- database - 如果我在 LINQ + Entity Framework 中的 FirstOrDefault() 之前不使用 Take(1),数据库会发送所有记录吗?
- c++ - 如何使用工厂生成具有特定类型的模板类的对象?
- c++ - C ++ tbb流程图,multifunction_node给出不完整的类型错误
- python - 装有 Windows 10 的笔记本电脑上的 Python 3.8.6(为 matplotlib 下载适当的安装程序)
- javascript - TypeError:无法读取 Vue 中未定义的属性“_modulesNamespaceMap”
- python - 无法识别 BeautifulSoup 注释表中的差异
- python - Pygame - 如何更改和保持背景屏幕
- r - 删除出现在字符串末尾的字符匹配
- sql - SQL:在 UNION 与 UNION ALL 中,隐含的 ID 是什么?