我有以下JavaScript代码:
async function awaitFetch(urlString) {
try {
let status = await fetch(urlString);
return status;
} catch(e) {
alert(e);
}
}
let response = null;
let url = 'https://stackoverflow.com';
awaitFetch(url).then(function (resolve) { response = resolve.status });
while (response === null) {};
console.log(response);
while循环永远运行,我发现response
永远不会从null更改,因为promise永远不会解决。为什么我的代码会这样?我希望当异步代码将response
变成200
或您拥有什么(null
之外的东西)时,循环将停止执行,但是那永远不会发生。循环永远执行,而我的console.log()
从未运行。为什么会这样?
我真正想做的就是暂停执行,直到response
是实际的响应,然后将其记录下来。我也有约束,无法将console.log()
放在.then()
内。如果事件循环被我的while循环阻塞,那么我可以暂停执行直到response
更新而无需将console.log()
放入async
函数或.then()
中的方式??
答案 0 :(得分:0)
JavaScript是单线程的,因此while循环将阻止所有处理。异步任务的完成后逻辑仍必须在同一单个线程上运行。
如果您要等待Promise,而不要进行旋转循环,请使用await
:
async function() {
let url = 'https://stackoverflow.com';
const { status: response } = await awaitFetch(url);
console.log(response);
}
...或将您的逻辑放入.then
回调中。
awaitFetch('https://stackoverflow.com')
.then(function (resolve) {
const response = resolve.status
console.log(response);
});
答案 1 :(得分:-3)
您可以尝试在while循环块中放置对awaitFetch的调用吗?