Skip to content
本页内容

轮询

基本用例

提供了 pollpoll.create API 用来轮询。

poll(fn, options) 接收两个参数,fn 是需要轮询的函数,options 是轮询的配置选项

调用 poll 后会立即开始轮询,并返回表示轮询结果的 promise 对象:

js
const result = poll(() => miniquest.get('/user?id=1'), {
  validate: (response) => response.success,
  interval: 1000,
  retries: 5,
});

result
  .then((res) => {
    // 成功
  })
  .catch((reason) => {
    // 失败
  });

// 通过调用 cancel 方法取消轮询
result.cancel();

也可以调用 poll.create 创建一个轮询函数,它接收的参数和 poll 一致:

js
const pollFn = poll.create(() => miniquest.get('/user?id=1'), {
  validate: (response) => response.success,
  interval: 1000,
  retries: 5,
});

pollFn(); // 开始轮询

参数

fn

需要轮询的函数,可以在 fn 的参数中接收到当前重试次数和取消轮询的方法。fn 可以是一个同步函数或者一个最终返回表示轮询结果的 promise 的异步函数:

js
const fn = ({ retried, cancel }) => {
  // retried: 当前重试次数
  // cancel: 取消轮询的方法
};

poll(fn, options);

options.validate

校验轮询是否成功的函数。接收 fn 的返回结果,并返回一个布尔值来表示轮询是否成功。

options.interval

轮询间隔,单位为毫秒。可以传递一个数字,或者一个接收当前重试次数,返回轮询间隔的函数:

js
const options = {
  interval: 1000,
};

// 或者
const options = {
  interval: ({ retried }) => {
    // 可以根据当前重试次数实现指数退避算法
  },
};

options.retries

轮询错误重试次数。可以传递一个数字,或者一个接收当前重试次数,返回重试次数的函数。

options.onSuccess

轮询成功的回调函数。当 options.validate 返回 true 时触发。

options.onFail

轮询失败的回调函数。当轮询超过最大重试次数时触发。

options.onCancel

取消轮询的回调函数。当取消轮询时触发:

js
const fn = ({ retried, cancel }) => {
  // 可以在 fn 中取消轮询
  cancel();
};

const result = poll(fn, options);
// 也可以调用返回值的 cancel 方法取消
result.cancel();

返回值

返回值是一个表示轮询结果的 promise 对象,并包含一个取消轮询的方法。

Released under the MIT License.