首页 > 解决方案 > Fetch API 总是返回一个 Promise

问题描述

我在调用 api 的地方有以下代码


    const fetchToken = async () => {
      const response = await axios.post("http://localhost:3000/api/getRedisData", 
      {
        key: process.env.AUTH_TOKEN_NAME!,
      });
      console.log(response); // this returns what I expect it to return
      return response;
    };

然后我像这样调用函数。


    fetchToken();

现在,这个功能工作得很好。但是当我尝试保存这个响应的数据时,如下所示。


    token = fetchToken().then((r) => r);

它返回一个承诺,它永远不会解决。发生了什么,我该如何等到这个承诺解决。我只需要等待并获取数据。提前致谢。

我更新了这个问题。

假设我有以下对象。

    const authMachine = createMachine<toggleAuth>({
      id: "auth",
      initial: "unauthenticated", // I want to chage this value based on token
      context: {
        //
      },
      states: {
        //
      },
    });

现在我想根据我是否获得令牌来更新初始属性。现在我正在做这样的事情。

    initial: token ? "authenticated" : "unauthenticated"

那么这里有什么问题呢?

标签: javascriptpromise

解决方案


如果你在一个async函数中,你可以只用await它来获取数据。

const token = await fetchToken();
console.log(token);
// do other stuff with token

then如果你不是,那么你需要在你的方法中使用令牌做所有你想做的事情。这是因为您正在调用一个async方法并且没有能力调用await它。执行将继续。该函数是您的方法成功完成then时发生的回调。async

fetchToken().then(token => {
  console.log(token)
  // do other stuff with token
});

推荐阅读