传递给函数的对象数组为空

Posted

技术标签:

【中文标题】传递给函数的对象数组为空【英文标题】:Array of objects passed to function is empty 【发布时间】:2020-04-27 23:06:47 【问题描述】:

用 typescript 编写的 Ionic 应用程序:

 let files: any[] = [];
 files =this.getFiles("wildlife");
 console.log("files:", files);
  this.render(files); 

这个输出说

这很奇怪,因为虽然那里有 50 个项目,但它显示 Array(0)。 问题是当我在函数中传递这个数组时:

  render( files) 
    
     files.forEach(item => 
    console.log(item) <- does not exist

    );
    

数组为空。这是为什么 ? 还有其他方法可以传递数组并循环其对象吗?

编辑:

getFiles(folder) 
    let files: any[] = [];

    this.file.listDir(this.file.applicationDirectory, 'www/assets/' + folder)
      .then((items) => 
        // console.log(items);

        items.forEach(item => 
          files.push(
            filename: item.name,
            name: this.getName( item.name)
          );
        );
      )
      .catch(err =>
        console.log("error: ", err));

    return files;
  

【问题讨论】:

你不能在没有async的情况下使用await 将你的代码包装在函数中标记函数异步 getFiles 是什么样子的? 我猜你正试图在它们实际存在之前将它们记录到渲染函数中。你可能没有像你应该的那样使用异步等待。您能否发布更多代码,以便我们看到更大的图景。 请忽略 async/await 关键字。我试过了,没有 我怀疑你是 not properly returning some async response 而你是 looking at this in the browser console which is lazy about evaluating objects 所以当你登录时 files它是一个空数组但是当你展开它时(不同的时间点),它现在已填充。这里的代码不足以说明如何修复它,但请查看我的第一个链接。 【参考方案1】:

您需要将getFiles 函数调用为异步函数。

let files: any[] = [];
 this.getFiles("wildlife")
   .then(res => 
     files = res;
     console.log("files:", files);
     this.render(files);
 ); 

【讨论】:

以上是关于传递给函数的对象数组为空的主要内容,如果未能解决你的问题,请参考以下文章

将变量传递给一个数组中对象的函数

尝试将对象数组传递给函数时出错

将对象数组传递给构造函数[重复]

将包含对象数组的 json 传递给 PostgreSQL 函数会引发格式错误的数组文字。意外的数组元素

使用构造函数将数组传递给对象后,值已更改(在 c++ 中)。我想不通为啥

将对象的嵌套数组列表从适配器传递到活动