gpt4 book ai didi

javascript - 无法弄清楚如何正确格式化异步函数,以便脚本暂停,等待返回调用

转载 作者:行者123 更新时间:2023-12-03 00:18:36 26 4
gpt4 key购买 nike

我正在尝试找出如何正确使用异步函数来实现如下所述的目的。

<code>
async function commentGrabSwitchboard(){
let prevStored = await checkStorage();
if(IsAmazonFirstProductPage(document)){
if(prevStored == undefined){
collectProductComments();
}else{
console.log("Results retrieved from chrome local storage: \n" + JSON.parse(prevStored));
}
}
}
</code>

该功能被设计为总机。它执行以下两件事之一 - 调用collectProductComments 或(目前)控制台记录结果 - 取决于 checkStorage 函数的返回值:

<code>
async function checkStorage(){
let key = location.host + location.pathname;
try{
chrome.storage.local.get(key, function(result) {
let returnData = result[key];
return returnData;
});
}catch(err){
console.log("Results for domain: " + key + "could not be retrieved from chrome local storage. Error: " + err);
}
}
</code>

此函数检查本地存储中的值,并返回该值。如果什么也没找到,则返回值是未定义的。我遇到的问题是,脚本在声明变量 prevStored = checkStorage 后不会等待 checkStorage 解析,因此 if 语句“prevStored == undefined”始终为 true。我已经验证 checkStorage 函数确实从本地存储返回了预期值。

有人可以给我一些关于我做错事的指示吗?也欢迎任何替代解决方案。谢谢。

临时:更改第二个功能

function checkStorage(){
let key = location.host + location.pathname;
let storageSearched;
let returnData;
try{
chrome.storage.local.get(key, function(result) {
returnData = result[key];
storageSearched = true;
});
}catch(err){
console.log("Results for domain: " + key + "could not be retrieved from chrome local storage. Error: " + err);
storageSearched = false;
}
let promise = new Promise((resolve, reject) => {
if(storageSearched){
resolve(returnData);
}else{
reject();
}
});

promise.then(function(fromResolve){
return fromResolve;
});
}

最佳答案

你的第一个函数很好。问题出在第二个函数上。

您的第一个函数正在等待第二个函数。你只能等待一个 promise 。第二个函数返回一个 promise 。 (到目前为止还不错)。

第二个函数不等待chrome.storage.local.get在 promise 兑现之前。刚刚结束,没有return语句,并将 promise (通过 async 关键字创建)解析为 undefined .

所以:

  • 删除 async第二个函数中的关键字
  • new Promise() 创建 promise 在第二个函数内
  • 兑现 promise
  • 通过 returnData 履行该 promise 而不是毫无意义地返回 returnData来自回调函数。

进一步阅读:How do I convert an existing callback API to promises?

关于javascript - 无法弄清楚如何正确格式化异步函数,以便脚本暂停,等待返回调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54425725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com