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

我在使用第二个功能时遇到问题。它在“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 是唯一的解决方案还是有其他方法来解决它?


慕田峪7331174
浏览 103回答 2
2回答

森栏

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 异步或不异步。它不会改变任何东西。

jeck猫

您将不得不使用一个不能同时工作的异步函数。你可以做类似的事情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 语句移到回调函数之外。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript