为什么异步等待不能正确地与axios一起使用?

时间:2019-08-08 15:28:01

标签: javascript ecmascript-6 axios

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

这是到我具有简单代码的沙箱的链接。为什么它会一直返回承诺,而不是等到axios调用之前我等待时才完成解决?

就好像它只是返回承诺而已。如果在函数本地作用域内执行console.log,它将返回一个promise对象;如果我返回结果并在全局作用域中执行一个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);

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

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

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

1 个答案:

答案 0 :(得分:2)

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

(async () => {
  const response = await GetPosts();
  console.log(response);
})();

不用等待,您所收到的只是承诺。

值得注意的是,您应该始终预料到最糟糕的情况,并使用catch在GetPosts中或外部处理请求错误。