While循环阻止解决承诺

我有以下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()中的方式??

thebestme_1 回答:While循环阻止解决承诺

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);
  });
,

您可以尝试在while循环块中放置对awaitFetch的调用吗?

本文链接:https://www.f2er.com/2910698.html

大家都在问