为什么等待的response.json()调用返回挂起的承诺[重复]

问题描述 投票:0回答:1

当我执行以下代码时:

async function getURL(url) {
    let response = await fetch(url);
    let parsedResponse = await response.json();
    return(parsedResponse.activity)
}

(async() => {

    console.log(getURL('https://www.boredapi.com/api/activity/'));

})();

控制台记录待处理的承诺

VM87:8 Promise {<pending>}

我的理解是等待:

await 通常用于通过传递 Promise 作为表达式来解开 Promise。使用await 会暂停其周围异步函数的执行,直到promise 得到解决(即履行或拒绝)。当执行恢复时,await 表达式的值将变为已履行的 Promise 的值。

我期望

await response.json()
在解析 json 并且 parsedResponse 的值是一个 json 对象时暂停执行我的代码。

我知道如果我这样做

console.log(await getURL('https://www.boredapi.com/api/activity/'));
我会得到正确的回应。

然后我尝试了

return(await parsedResponse.activity)
,这样我就不必每次调用该函数时都使用await。但这也返回了响应。

我不明白为什么将await放在parsedResponse.activity上不会“解开”承诺,但在getURL函数上执行它却可以。

javascript asynchronous async-await
1个回答
-1
投票

fetch
返回
promise
,因此
async/await
。您可以避免将
fetch
包裹在
async/await
内。但如果你仍然想使用它,你可以通过在
getURL
 中使用 
await
 来等待 
IIFE

完成执行

async function getURL(url) {
  let response = await fetch(url);
  let parsedResponse = await response.json();
  return parsedResponse.activity
}

(async() => {
  const res = await getURL('https://www.boredapi.com/api/activity/');
  console.log(res);
})();

© www.soinside.com 2019 - 2024. All rights reserved.