将扩展中的Promise.all的源路径数组转换为获取承诺数组

问题描述

在扩展程序中,我试图获取一组本地资源,并将它们从本地html文件页面脚本传递到其内容脚本,再传递到后台脚本,最后传递到扩展页面以进行显示。因为资源是本地的,所以它以页面脚本开始。

如果获取一个资源,则该资源将正常运行,并且扩展页面显示该资源。当资源数组的长度大于1时,它仅在写出提取请求时才起作用,就像事先知道该长度一样。如果使用array.map将资源路径数组转换为要在Promise.all中使用的获取数组,则获取数据到达后台脚本时为空,尽管页面内容中的所有日志脚本显示文件

代码在下面。 con_script.return_fetch内容脚本中位于页面脚本窗口上的函数,使用cloneInto将数据传递到后台脚本。 o只是具有两个属性的对象,src是源路径的数组,而caller的选项卡的tab.id带有已加载的扩展页,该扩展页已加载以启动事件以请求显示资源。 Promise.all添加第三个属性status,具体取决于集合是否全部解析。

如果从此页面脚本或关联的内容脚本将o.src写入控制台,则它应该是一个斑点数组。但是在后台脚本中,它包含路径而不是斑点。仅在使用Array.map时会发生这种情况。

为什么使用Array.map会导致在后台脚本中无法识别对对象o的更改?我再说一遍,但是如果改用注释的Promise.all,则完全相同的代码可以正常工作。但是,当然,每个请求中的资源数量是未知的。

除了Array.map之外,还有其他方法可以将源数组转换为获取承诺数组吗?

谢谢。

Promise.all( o.src.map( ( v,i ) => { fetch_i( v,i ); } ) )
//Promise.all( [ fetch_i( o.src[ 0 ],0 ),fetch_i( o.src[ 1 ],1 ) ] )

  .then( ( r ) => 
    { 
      o.status = 'resolve';
      window.con_script.return_fetch( o ); 
    } )
  .catch( ( e ) =>
    { 
      o.status = 'reject';
      o.src = e;
      window.con_script.return_fetch( o ); 
    } );

function fetch_i( v,i )
  {
    return new Promise( ( resolve,reject ) =>
      {     
        fetch( v )
          .then( response => response.blob() )
          .then( ( myBlob ) =>
            { 
              o.src[ i ] = myBlob; // Overwrite the source path with the blob.
              resolve(); 
            } )
          .catch( ( e ) =>
            { 
              reject( e );
            } );
      } ); // close promise
  } // close fetch_i

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...