程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了等待 executeScript 完成大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决等待 executeScript 完成?

开发过程中遇到等待 executeScript 完成的问题如何解决?下面主要结合日常开发的经验,给出你关于等待 executeScript 完成的解决方法建议,希望对你解决等待 executeScript 完成有所启发或帮助;

我有一个从 Chrome 扩展程序执行的脚本

export const getData = () => {
  Chrome.tabs.query({ active: true,currentwindow: true },tabs => {
    Chrome.tabs.executeScript(
      tabs[0]?.ID,{ code: `document.getElementByID('a1').INNERHTML;` },parseData
    );
  });
};

const parseData = (result: any) => {
  const obj = new Something();
  // Do complex stuff with this object
  Chrome.storage.sync.set(
    {
      ID: obj.ID,}
    );
  console.log('ID from extract',obj.ID);
};

在我的后台脚本中,我调用了这个函数,然后调用了通过Chrome存储获取解析数据的函数,所以这两个函数都以回调作为参数。

我需要在执行另一个函数之前完成我的第一个函数,但它完全忽略了 await,我不确定为什么以及如何让它等待(如果可能的话)

后台脚本

Chrome.runtime.onmessage.addListener(async(request,sender,sendResponsE) => {
    let List = [];
      await getData();
      await getExtractedData((value) => {
        // Do a lot of stuff with `List`
        console.log('After extract:',value);
      });
  }
);

getExtractedData 函数在另一个文件中:

export const getExtractedData = (callBACk) => {
  return Chrome.storage.sync.get(
    [
      'ID',],callBACk);
};

应该打印这个:

ID from extract 123456
After extract {ID: 123456}

但它目前正在这样做:

After extract {ID: 123455}
ID from extract 123456

(提取后记录它在上次运行中提取的内容,而不是在当前运行中)

解决方法

函数需要返回一个带有正确连接的 resolve/reject 的 Promise。

const getData = () => new Promise(resolve => {
  chrome.tabs.executeScript({Code: `document.getElementById('a1').innerHTML`},res => {
    parseData(res).then(resolvE);
  });
});
const parseData = (data) => new Promise(resolve => {
  // Do complex stuff with this object
  chrome.storage.sync.set({id: obj.iD},() => resolve(obj.id));
});
const getExtractedData = () => new Promise(resolve => {
  chrome.storage.sync.get('id',data => resolve(data.id));
});

便说一句,您不需要存储,因为 getData 的 Promise 链已经解析为已处理的 id:

async foo => {
  const resultId = await getData();
  // ..........
}

大佬总结

以上是大佬教程为你收集整理的等待 executeScript 完成全部内容,希望文章能够帮你解决等待 executeScript 完成所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。