对象键值为空但有数据

Object key values are empty but had data

所以我有一个对象,在某个时候为每个键获取一个值但突然丢失所有键值。

键值变为空,并且在控制台上对象上有一条消息说:“这个值是在第一次扩展时计算的。从那以后它可能已经改变了”,但我没有改变其他任何地方的价值。

我的服务:

image = {
  name: "",
  path: "",
  data: ""
};

async loadFileData(fileNames: string[]) {
    for (let f of fileNames) {
      const filePath = `${IMAGE_DIR}/${f}`;
      const readFile = await Filesystem.readFile({
        directory: Directory.Data,
        path: filePath
      });

      this.images.push({
        name: f,
        path: filePath,
        data: `data:image/jpeg;base64,${readFile.data}`
      });

      // testing
      this.image.name = f;
      this.image.path = filePath;
      this.image.data = `data:image/jpeg;base64,${readFile.data}`;
    }

    console.log('my image: ', this.image);
  }

  async loadFiles() {
    this.images = [];

    const loading = await this.loadingController.create({
      message: 'loading data...',
    });
    await loading.present();

    Filesystem.readdir({
      directory: Directory.Data,
      path: IMAGE_DIR
    }).then(result => {
      this.loadFileData(result.files);
    }, async err => {
      console.log('err: ', err);
      await Filesystem.mkdir({
        directory: Directory.Data,
        path: IMAGE_DIR
      });
    }).then(_ => {
      loading.dismiss();
    });
  }

我的组件:

this.photoService.loadFiles();

console.log('my object: ', this.photoService.image);

console.log('is my object empty? ', JSON.stringify(this.photoService.image) === '{}');

my console (screenshot)

其原始值为image = { name: "", path: "", data: ""};
然后你把它改成 { name: "164....", path: "stored...", data: "data..."};

我可以在控制台中做一个类似的演示:

那么当我按下按钮展开时会发生什么?
现在它显示数据已更改为“whatever”等,但其原始值 image = { name: "", path: "", data: ""}; 仍显示(已记录)。

展开形式显示数据。 empty 值属于 old 数据。

关于 javascript 的异步和内存。

当你运行console.log(this.photoService.image)

this.photoService.loadFiles();是运行宁

这个值:{ name: "", path: "", data: ""}

当您检查控制台的值时:

this.photoService.loadFiles();完成

this.photoService.image 的内存已更新

这个值 => { name: "xxx....", path: "yyy...", data: "zzz..."}