3 回答

TA贡献1786条经验 获得超11个赞
最好的办法是可视化代码执行:
堆栈S
堆H
队列Q
执行时,将您funcOuter
放在S上
与分配,函数调用和日志一样:
小号:funcOuter
,let newList =[];
分配已执行...
小号:funcOuter
,this.calledFunc(callback);
函数被执行...
小号:funcOuter
,this.calledFunc(callback);
,calledFunc inner block
内部块和异步完成
小号:funcOuter
,console.log(newList[1])
,
问:possible async calls
日志完成:
小号:funcOuter
,
问:possible async calls
外部完成:
S:
问:possible async calls
从Q填充堆栈:
小号:callback
,
问:possibly more async calls
推送被执行:
小号:callback
,push
等等;) 事件循环
因此,将您的代码更改为:
funcOuter() { let newList =[]; this.calledFunc(function (param) { newList.push(param); newList[1] && console.log(newList[1]); });}

TA贡献1951条经验 获得超3个赞
如果您使用angular 2+,为什么具有回调功能,我认为这是一个解决方案。
export class AchievementComponent implements OnInit {
constructor() { }
ngOnInit() {
}
async funcOuter() {
let newList =[];
const param = await this.funcInner();
newList.push(param);
}
funInner() {
return new Promise((resolve, reject)=>{
this.calledFunc((param)=>{
resolve(param);
})
})
}
}
添加回答
举报