无法将localStorage数组中最后一条销售记录的vdate值显示到指定div的问题排查
无法将localStorage数组中最后一条销售记录的vdate值显示到指定div的问题排查
看起来你已经离解决问题只差一步了——console里能正确输出目标日期,但就是没法把它放到指定的div里,这种差临门一脚的情况确实让人挠头!我来帮你梳理下问题出在哪,再给你更简洁的解决思路~
原代码的核心问题
你的代码已经成功拿到了最后一条销售记录的vdate值,但漏掉了最关键的一步:把值赋值给div的内容!而且你用循环遍历整个数组来取最后一条记录的写法有点冗余,完全可以直接通过数组下标定位,效率更高。
另外还有个小细节:你给contacts的默认值是{}(空对象),但后面又用到了contacts.length,空对象是没有length属性的,改成[](空数组)会更合理,避免潜在报错。
更简洁的同步修正方案
既然你的目标是获取最后一个联系人的最后一条销售记录的vdate,直接用数组下标定位就行,不用循环遍历:
function loadLastSell() { // 从localStorage获取数据,默认值设为空数组(因为要用到length属性) var contacts = JSON.parse(localStorage.getItem("f7Contacts")) || []; // 先处理没有数据的情况,避免后续报错 if (contacts.length === 0) { document.getElementById("lselling").textContent = "暂无销售记录"; return; } // 获取最后一个联系人的销售记录数组 var lastContactSellings = contacts[contacts.length - 1].sellings; if (!lastContactSellings || lastContactSellings.length === 0) { document.getElementById("lselling").textContent = "暂无销售记录"; return; } // 获取销售记录数组的最后一条的vdate值 var lastSellingDate = lastContactSellings[lastContactSellings.length - 1].vdate; // 关键步骤:把日期值赋值给div document.getElementById("lselling").textContent = lastSellingDate; }
要确保这个函数在DOM完全加载完成后调用,比如放在DOMContentLoaded事件里:
document.addEventListener('DOMContentLoaded', function() { loadLastSell(); });
你的异步解决方案分析
你通过把函数改成async,添加await 2实现了效果,推测原因可能是原代码执行时DOM还没完全渲染完成,异步等待的2毫秒给了DOM加载的时间,所以能成功赋值。不过上面的同步写法配合DOM加载事件,逻辑会更清晰,也不用依赖等待的小技巧。
备注:内容来源于stack exchange,提问作者SIMBIOSIS surl
相关产品推荐
相关产品推荐

