1.遇到的问题 描述 使用 async和await时,在里面调用了异步函数,在接收返回的对象d后打印对象d数据是全的,但是使用时对象d里的children属性却还没获取到显示undefined 2.代码描述
function getData(d){
return new Promise((resolve,reject)=>{
d.forEach(element => {
api(element).then(res=>{
element.children = res.nodes
})
});
console.log('第一个打印')
resolve(d)
})
}
async function click(d){
var data = await getData(d)
console.log(data)
console.log('第二个打印')
data.forEach(collapse)
}
function collapse(d){
if(d.children){
}
}
3.解决方法 1.使用定时器 (pass)
async function click(d){
var data = await getData(d)
console.log(data)
console.log('第二个打印')
setTimeout(()=>{
data.forEach(collapse)
},1000)
}
2.使用promise.all()
function getData(d) {
let arr = [];
d.forEach(element => {
arr.push(api(element).then(res => {
element.children = res.nodes
}));
});
return Promise.all(arr).then(() => d);
}
4.错误原因 在getData()方法中 遍历d依次调用异步函数 ,当异步函数还没全部调用结束 ,就开始了reslove(d)这步将数据返回了, 数据d是引用类型 打印的话都是全的 如果使用json.parse(json.stringfyg())打印的话其实也是不全的
|