Javascript 而循环阻塞承诺无法解决

Javascript 而循环阻塞承诺无法解决,javascript,asynchronous,fetch-api,Javascript,Asynchronous,Fetch Api,我有以下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

我有以下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更改,因为承诺永远不会解析。为什么我的代码会这样?当异步代码将
response
转换为
200
或您拥有的东西(除了
null
)时,我希望循环停止执行,但这永远不会发生。循环永远执行,我的
console.log()
永远不会运行。为什么会这样


我真正想做的就是暂停执行,直到
response
是一个实际的响应,然后记录它。我还有一个限制,就是不能将
console.log()
放在
.then()中。如果我的while循环阻塞了事件循环,那么有什么方法可以暂停执行,直到
响应
更新,而无需将我的
控制台.log()
放入
异步
函数或
中。然后()

可以尝试将waitfetch调用放入while循环块中吗?

如果要等待承诺,请使用
wait
,而不是进行旋转循环:

async function() {
  let url = 'https://stackoverflow.com';
  const { status: response } = await awaitFetch(url);
  console.log(response);
}
…或将逻辑放入
。然后
回调

awaitFetch('https://stackoverflow.com')
  .then(function (resolve) { 
    const response = resolve.status 
    console.log(response);
  });

这将是非常好的,请记住异步并不意味着多线程。如果您想要JS多线程,可以使用Web Workers。Async只是意味着代码将一次运行一点,中间有其他代码,直到它完成并稳定下来。中间运行的while循环永远不会结束,因此它无法返回以检查异步代码,而您将得到一个无限阻塞循环。我不能将console.log()放在.then()或异步函数中。实际上,我的log函数表示需要等待我得到响应的数千行代码。出于各种原因,它们需要独立。对于JavaScript中的异步代码,无法避免使用回调函数或
wait
。也许你可以用更多的细节来重新表述这个问题,解释为什么不能使用异步函数。几乎可以肯定,有一种方法确实可以使用异步函数。