大佬教程收集整理的这篇文章主要介绍了等待 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,请注明来意。