node.js - 全局变量未更新
问题描述
我在这段代码中有问题。
我正在尝试解析一个 excel 文件,但无法建立父关系。
父记录创建成功,子记录也创建了,但是parent_id始终为0
let parent_id = 0; // this var not updated!!!
let workbook = new Excel.Workbook()
workbook = await workbook.xlsx.readFile(location)
workbook.worksheets[0].eachRow(async (row) => {
console.log(parent_id) // each time 0,0,0,0
const name = row.getCell(1).value
const obj = {
name,
number: row.getCell(2).value,
parent_id: name ? null : parent_id
}
if(obj.number && Number(obj.number) == obj.number){
const node = await LeadNode.create(obj)
if(name){
parent_id = node.id
console.log(parent_id) // work here 1,2,3,4,5
}
}
});
解决方案
问题是由于您的回调没有完成.eachRow()
而引起的。await
如果您以某种方式使回调 not async
,它将起作用。这意味着您必须await LeadNode.create(obj)
在回调之外调用它。
可能的解决方案:创建一个数组obj
,然后遍历它们并调用await LeadNode(...)
. 就像是:
let parent_id = 0; // this var not updated!!!
let workbook = new Excel.Workbook()
workbook = await workbook.xlsx.readFile(location)
const objs = [];
workbook.worksheets[0].eachRow((row) => {
console.log(parent_id) // each time 0,0,0,0
const name = row.getCell(1).value
const obj = {
name,
number: row.getCell(2).value,
}
objs.push(obj);
});
for (const obj of objs){
if(obj.number && Number(obj.number) == obj.number){
obj.parent_id = obj.name ? null : parent_id
const node = await LeadNode.create(obj)
if(name){
parent_id = node.id
console.log(parent_id) // work here 1,2,3,4,5
}
}
}
推荐阅读
- java - 我的 java 客户端不适用于我的 python 服务器
- java - 使用firebase android卡在阻止用户彼此之间的功能中
- python - ValueError:发现样本数量不一致的输入变量:[4, 103]
- javascript - 如何解决未捕获(承诺),无法在网络摄像头媒体设备上设置属性“innerHTML”为空
- android - 使用 Google Maps Android API 构建派对应用?
- html - 选定的 div 不应悬停在幻灯片中 [JsFiddle]
- google-apps-script - 用文本和链接替换文档文本
- java - JpaRepository 查找左连接无限循环
- javascript - JQuery-AJAX 表单提交但重新加载页面,更改 url
- svg - 创建用于导入 Three.JS 的 SVG 以使其符合真正的 SVG 设计时遗漏了哪一步?