在执行第二个 JS 之前等到一个函数完成
Wait till one function finishes before executing the second 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是唯一的解决方案还是有其他解决方法?
您将不得不使用不能同时工作的异步函数。
你可以做类似
的事情
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 实际上 returns 是一个未定义的值,因为在 chrome.storage.local.get 函数内部回调 returns s,所以你需要移动回调函数外的 return 语句。
async / await 不是唯一的解决方案。在任何情况下,您都需要在 functionOne
中创建一个 promise
/*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) {
//...
});
}
您需要创建一个承诺才能 return chrome.log.storage 的结果。您可以使 functionOne 异步或不异步。它不会改变任何东西。
我在使用第二个功能时遇到问题。它贯穿于'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是唯一的解决方案还是有其他解决方法?
您将不得不使用不能同时工作的异步函数。 你可以做类似
的事情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 实际上 returns 是一个未定义的值,因为在 chrome.storage.local.get 函数内部回调 returns s,所以你需要移动回调函数外的 return 语句。
async / await 不是唯一的解决方案。在任何情况下,您都需要在 functionOne
中创建一个 promise/*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) {
//...
});
}
您需要创建一个承诺才能 return chrome.log.storage 的结果。您可以使 functionOne 异步或不异步。它不会改变任何东西。