为什么 async wait 不能正确地与 axios 一起工作?

San*_*il9 5 javascript ecmascript-6 axios

https://codesandbox.io/s/asyncawait-axios-practice-c060n

这是我拥有的带有简单代码的沙箱的链接。为什么它不断返回承诺而不等到它完成解析,因为我在 axios 调用之前放置了 wait ?

就好像它只是返回承诺并且完成了。如果我在函数本地范围内执行 console.log ,它将返回一个承诺对象,如果我返回结果并在全局范围内执行 console.log ,它将返回我正在寻找的内容。问题是,我认为我不必这样做并等待承诺解决。我知道 asyn 返回一个承诺,axios 也返回一个承诺...那么在处理承诺解决承诺时我错过了什么?

import axios from "axios";

async function GetPosts() {
  const result = await axios.get("https://jsonplaceholder.typicode.com/posts");
  const data = await result.data;
  return data;
}

const response = GetPosts();
console.log(response);
Run Code Online (Sandbox Code Playgroud)

我只是想确保我对正在发生的事情的基本理解是正确的。

  • 我正在导入 axios
  • 我正在声明一个名为 GetPosts() 的函数,该函数在 axios 调用之前已等待。(我假设它会暂停直到完成)
  • 我正在等待结果数据

我收到了一个承诺,而不是预期的 json。为什么?

Dom*_*nic 5

因为您正在调用该函数但不等待结果。

(async () => {
  const response = await GetPosts();
  console.log(response);
})();
Run Code Online (Sandbox Code Playgroud)

无需等待,您收到的只是一个 Promise。

值得注意的是,您应该始终做好最坏的打算,并在 GetPosts 中或在 GetPosts 外部使用catch.

  • 谢谢你!所以这只是我的一个根本性误解。这就是承诺的工作方式。我感谢您的帮助! (2认同)