繁体   English   中英

如何直接从异步 function 返回 object?

[英]How to return a object directly from async function?

  • 我有 Redux 存储 function ,我必须在其中制作 AJAX 并相应地更新 Z9ED39E2EA939486B73EZA98。 但是,我创建了以下 function,它在返回 state 之前不会更新 x 值。 所以,我创建了async function。
  var x =[]
  lookup(
      "GET",
      "api/post/",
      (response, status: number) => {
        Object.assign(x, response);
      }
    );
  console.log(x,'her x stay just ampty array []');
switch (action.type) {
    case "SetData":
      return { ...state, data: x };
    default:
      return state;
  }

  • 在以下示例中,我试图在 function lookup之外获取响应,因此我创建了一个名为newData的同步,如何使其直接重新运行res而无需在其中设置var
const newData = async () => {
    var x: any = [];
    await lookup(
      "GET",
      "api/post/",
      (response: myArrays["posts"], status: number) => {
        Object.assign(x, response);
      }
    );
    return x;
  };
  console.log(newData().then((res) => res));


switch (action.type) {
    
    case "SetData":
      return { ...state, data: newData().then((res) => {return res}) };
    default:
      return state;
  }

  • 请注意:我不能在我的商店 function 中使用 React.usesState(),因为它不是组件 function。

以您尝试执行此操作的方式执行此操作是不可能的。 你需要做的是这样的:

const data = await newData();
dispatch({ type: "SetData", data })

Redux 减速机不能异步。 减速器采用以前的 state 和一个动作并将其映射到一个新动作。 而已。 您不能从 reducer 调度操作或触发 API 调用。

API 调用需要在其他地方完成 - 在您的组件中,在redux-thunk操作创建器中等。一旦 API 调用完成,然后您使用您收到的数据发送一个“SetData”操作。 然后,reducer 根据此数据更新state

以下应该有效:

const newData = async () => {
    return await lookup(
      "GET",
      "api/post/",
      (response: myArrays["posts"], status: number) => {
        Object.assign(x, response);
      }
    );
};

console.log(await newData());

这样,您可以避免按照您的要求在newData中分配另一个var

另请查看此redux 教程,了解如何使用 redux 进行异步数据获取。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM