什么';根据JavaScript中的异步函数暂停整个脚本执行的正确方法是什么?
我的很多脚本取决于首先使用什么';根据JavaScript中的异步函数暂停整个脚本执行的正确方法是什么?,javascript,Javascript,我的很多脚本取决于首先使用fetch()和.JSON()从.JSON文件读取的信息,因此它是异步的。我需要延迟脚本的其余部分的执行,直到这些函数完成,而不需要将代码的其余部分粘在一个巨大的.then()或函数块中。我已经四处搜索过了,但我真的找不到我要找的东西 let config; fetch(chrome.runtime.getURL("../config.json")) .then(response => response.json()) .then(json =>
fetch()
和.JSON()
从.JSON文件读取的信息,因此它是异步的。我需要延迟脚本的其余部分的执行,直到这些函数完成,而不需要将代码的其余部分粘在一个巨大的.then()
或函数块中。我已经四处搜索过了,但我真的找不到我要找的东西
let config;
fetch(chrome.runtime.getURL("../config.json"))
.then(response => response.json())
.then(json => config = json);
console.log(config);
// REST OF SCRIPT
它应该记录config JSON对象或promise,但显然,它只返回未定义的。任何帮助都将不胜感激 在请求返回之前,正在读取您的
config
。您可以添加另一个然后子句:
let config;
fetch(chrome.runtime.getURL("../config.json"))
.then(response => response.json())
.then(json => config = json)
.then(() => {
console.log(config);
});
您可以使用以下选项:
fetch(chrome.runtime.getURL("../config.json"))
.then(response => response.json())
.then(config => console.log(config));
或:
您只有一个线程可以使用,因此无法回避这样一个事实:您需要执行配置的异步获取,然后继续执行程序的其余部分。大多数javascript都是事件驱动的,所以这通常不是什么大问题。您可以使用一种风格编写代码,其中代码的主要入口是main()
函数,然后您可以在获取它之后使用配置调用它:
fetch(chrome.runtime.getURL("../config.json"))
.then(response => response.json())
.then(main);
function main(config){
// do stuff
}
任何较大的代码库都将被重构为较小的函数,因此理想情况下,您的主
函数一开始就不应该太大。添加另一个,然后
或使用异步
/等待
^我认为在函数之外无法工作,但总体而言,这是一个更好的选择:)可能重复的是,没有办法绕过ypur代码周围的巨大功能块我想在脚本的其余部分访问不同位置的config
对象,因此,如果可以的话,我真的不想把整个脚本的其余部分放在一个then
子句中。你必须这样或那样做,因为它是“异步的”,如果你想在“then”之外“模拟”它,你可以使用async
和wait
,但请记住它只是在模拟上面的内容,这是语法糖,没办法。承诺一路走来。如果担心性能,您可以编写一个名为getConfig()的承诺返回包装,第一次缓存配置。您也必须等待响应。json()
。没错,我已经解决了这个问题。我有点犹豫是否要将我的整个脚本包装成一个,然后
,但是将它拆分成一个main()
,就像在其他语言中一样,这是一个非常好的方法。谢谢另外,当您执行时,则(函数)代码>它只是调用该函数并将承诺值作为参数传递给该函数吗?是的then()
接受一个函数。因此,您可以执行然后(config=>main(config))
,但这只是在本例中增加了一个间接级别,因为main
已经是一个函数了。
fetch(chrome.runtime.getURL("../config.json"))
.then(response => response.json())
.then(main);
function main(config){
// do stuff
}