【问题标题】:Setting Promise object to img [src] sets image to null..sometimes将 Promise 对象设置为 img [src] 将图像设置为 null..sometimes
【发布时间】:2020-11-29 02:11:25
【问题描述】:

我在我的 Electron 应用程序中使用 Angular。我有一个组件,其中包含一个名为files 的对象数组,其中每个file 都有一个名为preview 的成员,它是一个Promise 对象并返回一个file:// 对象。

<mat-list-item *ngFor="let file of files;">
<img mat-list-avatar [src]="file.preview ? (file.preview | async | safe) : 'assets/file.png'"
...
  async getPreview() {
    return new Promise((resolve, reject) => {
      // simplified for example
      resolve("assets/file.png");
    });
  }
  ...
  for (let file in files) {
    file.preview = getPreview();
  }

files 是该组件中的 @Input。当我在父组件中重建这个数组时,我经常得到损坏的图像。 (见下面的截图)。

最终,通过在窗口上移动鼠标,可以正确绘制图像。有谁知道某处是否缺少重绘,或者我如何找出为什么 img src 有时会临时设置为 null?

附:在 safe 管道中,我可以确认在某些情况下传入的值已经为 null,尽管 file.preview 附加了一个 Promise 对象。

谢谢!

重新调整应用窗口焦点后:

在应用窗口上移动鼠标一秒钟后:

【问题讨论】:

    标签: javascript angular electron


    【解决方案1】:

    你能试试下面的代码吗

    for (let file in files) { 
    file.preview = getPreview();
    } 
    
    this.files=[...this.files]:
    

    【讨论】:

    • 感谢您的回复!不幸的是,这没有帮助。我意识到file.preview ? (file.preview | async | safe) : 'assets/file.png' 在safe 的第一次调用中返回null。它只是将 url 通过隧道,但很好地用于断点。这怎么能返回null? Promise 对象没有任何reject(..) 调用
    • 现在工作了吗?它可以在没有安全管道的情况下工作,对吧?
    • 不,不幸的是它仍然是一样的。 safe 只是将 url 通过隧道,我可以看到输入是什么,在某些情况下是 null
    • 我无法让它在 Stackblitz 上重现。它可能与电子有关。我会再尝试一件事,否则在 Github 上做一个最小的例子
    • 我想我刚刚明白了!我现在使用 @HostListener('window:focus' 而不是 ipcRenderer.on("focus" 来重新创建 files 数组,这样可以:-o
    猜你喜欢
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多