为了账号安全,请及时绑定邮箱和手机立即绑定

数组中有值,但无法访问它们,这可能是什么问题?

数组中有值,但无法访问它们,这可能是什么问题?

万千封印 2021-05-03 08:10:29
我通过一个回调函数得到两个值(字符串),假设这两个值是a和b,所以现在我将这些值压入数组。当我console.log这个数组时,只有当我通过单击箭头符号扩展数组时,它才会显示这些值。当我尝试访问索引值时,它说未定义。所以我猜有一个问题函数调用吗?funcOuter() {    let newList =[];    this.calledFunc(function (param) {        newList.push(param);    });    console.log(newList[1]);}实际输出:不明确的预期产量:123.234.556
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

最好的办法是可视化代码执行:

堆栈S

H

队列Q

执行时,将您funcOuter放在S上

与分配,函数调用和日志一样:

小号funcOuterlet newList =[];

分配已执行...

小号funcOuterthis.calledFunc(callback);

函数被执行...

小号funcOuterthis.calledFunc(callback);calledFunc inner block

内部块和异步完成

小号funcOuterconsole.log(newList[1])

possible async calls

日志完成:

小号funcOuter

possible async calls

外部完成:

S

possible async calls

从Q填充堆栈:

小号callback

possibly more async calls

推送被执行:

小号callbackpush

等等;) 事件循环

因此,将您的代码更改为:

funcOuter() {    let newList =[];    this.calledFunc(function (param) {
        newList.push(param);
        newList[1] && console.log(newList[1]);
    });}


查看完整回答
反对 回复 2021-05-06
?
饮歌长啸

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);

      })

    })

  }


}


查看完整回答
反对 回复 2021-05-06
  • 3 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信