Skip to content

useAsyncTasks

使用promise链处理异步任务,并记录完成任务的进度和结果。

示例

点我查看代码
tsx
import { useAsyncTasks } from "@wenonly/react-hooks";
import { useMemoizedFn, useMount, useUpdate } from "ahooks";
import { Button, Progress, Space, Spin } from "antd";
import React from "react";

const RUseAsyncTasks = () => {
  const { tasks, loading, percent, addTask, clearTasks, runNext, runAll } =
    useAsyncTasks();
  const update = useUpdate();

  const add = useMemoizedFn(() => {
    addTask(() => {
      update();
      return new Promise((resolve) => {
        setTimeout(() => {
          resolve("result");
          setTimeout(() => update(), 1);
        }, 1000);
      });
    });
    update();
  });

  useMount(() => {
    for (let i = 0; i < 10; i++) {
      add();
    }
  });

  return (
    <div>
      <ul>
        {tasks.current.map((item) => (
          <li key={item.id}>
            {item.id} {item.status === "running" ? <Spin /> : item.status}{" "}
            {item.result}
          </li>
        ))}
      </ul>
      <Space>
        <Button onClick={add}>addTask</Button>
        <Button loading={loading} onClick={() => runAll()}>
          runAll
        </Button>
        <Button loading={loading} onClick={() => runNext()}>
          runNext
        </Button>
        <Button onClick={() => clearTasks()}>clearTasks</Button>
      </Space>
      <Progress percent={percent} />
    </div>
  );
};

export default RUseAsyncTasks;

参数

UseAsyncTasksOptions

key类型描述
delaynumber | undefined每个请求间隔时间