为了账号安全,请及时绑定邮箱和手机立即绑定

等到第一个函数完成后再执行第二个 JS

等到第一个函数完成后再执行第二个 JS

慕田峪7331174 2023-11-02 22:55:07
我在使用第二个功能时遇到问题。它在“w”中保存值之前运行。我尝试过 setTimout() 但没有帮助。我正在尝试实现 async/await,但我正在努力解决它如何与下面的代码相适应:function functionOne(){    var s    chrome.storage.local.get(['prm'], function(result) {        s = result.prm;        return s;        });}function functionTwo(){    let w = functionOne();        // second half runs after w is assigned a value (after functionOne is done running).      }async/await 是唯一的解决方案还是有其他方法来解决它?
查看完整描述

2 回答

?
森栏

TA贡献1810条经验 获得超5个赞

async/await 不是唯一的解决方案。无论如何,您都需要在 functionOne 中创建一个承诺


/*async*/ function functionOne(){


    var s;

    var p = new Promise(function(success) {

      chrome.storage.local.get(['prm'], function(result) {

        s = result.prm;

        success(s);    

      });

    }

    return p;

}



function functionTwo(){


    let p = functionOne();

    p.then(function(s) {

      //...

    });

        

}

您需要创建一个承诺才能返回 chrome.log.storage 的结果。您可以使 functionOne 异步或不异步。它不会改变任何东西。


查看完整回答
反对 回复 2023-11-02
?
jeck猫

TA贡献1909条经验 获得超7个赞

您将不得不使用一个不能同时工作的异步函数。你可以做类似的事情


function functionOne(){

    var s

    chrome.storage.local.get(['prm'], function(result) {

        s = result.prm;

        return s;    

    });

}



async function functionTwo(){


    await let w = functionOne();

    

    // second half runs after w is assigned a value (after functionOne is done running).  

    

}

从这里引用: https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

注意:我还想指出,functionOne 实际上返回一个未定义的值,因为在 chrome.storage.local.get 函数内部回调返回 s,因此您需要将 return 语句移到回调函数之外。


查看完整回答
反对 回复 2023-11-02
  • 2 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信