1.0.3 • Published 3 years ago

rx-promise v1.0.3

Weekly downloads
9
License
ISC
Repository
github
Last release
3 years ago

RxPromise

魔改 Promise 使其支持 .retry .retryWhen 链式调用

Features

  • 重试次数 retry : 当源头 Promise 触发了 reject , 该方法不会继续传播失败而是重新执行源头直到达到最大重试次数(由数字参数指定).注意: 当参数为负数时,表示一直重试直到成功.

  • 重试函数 retryWhen : 当源头 Promise 触发了 resolve , 该方法会将 resolve 的结果为参数传入计算(支持异步)直到计算的结果符合预期才继续传播. 注意: 该方法不会截断源头和计算的错误异常,而是直接终止重试并将错误继续传递.

  • 延时 delay : 根据给定时间(单位: 秒)延迟执行异步操作. 注意: 当参数为负数时,将一直处于 pengding.

  • 防抖 debounceTime : 取消在两次(延时)执行之间小于指定时间的异步操作. 注意: 当参数非正数,立即执行异步操作.

  • 节流 throttleTime : 当指定的持续时间经过后立即执行异步操作. 注意: 当参数非正数,立即执行异步操作.

Usage

# install
yarn add rx-promise
# or
npm install rx-promise
const RxPromise = require('RxPromise');
// or
import RxPromise from 'RxPromise';
// 根据业务场景是否需要替换Promise
Promise = RxPromise;

const target = new RxPromise((resolve, reject) => {
  // code
});

target
  .retry(-1) // 执行直到被resolve
  .retryWhen(async resolveValue => /* 判断 */) // 继续执行满足条件
  .then((value) => {
    // resolve value
  })
  .catch((err) => {
    // catch err code
  });

Example

.retry

const target = new RxPromise((resolve, reject) => {
  // code
});
target
  .retry(3)
  .then((value) => {
    // resolve value
  })
  .catch((err) => {
    // catch err code
  });

.retryWhen

const target = new RxPromise((resolve, reject) => {
  // code
});
target
  .retryWhen(async resolveValue => {
    // retry method
    if (flag) {
      return await TrueFn
    } else {
      return false
    }
  })
  .then((value) => {
    // resolve value
  })
  .catch((err) => {
    // catch err code
  });

.delay

const target = new RxPromise((resolve, reject) => {
  // code
});
target
  .delay(0)
  .delay(1)
  .delay(2)
  .then((value) => {
    // delay time = 0 + 1 + 2 second
    // resolve value
  })
  .catch((err) => {
    // catch err code
  });

.debounceTime

const target = new RxPromise((resolve, reject) => {
  // code
});
target
  .debounceTime(0.3) // 0.3 second
  .then((value) => {
    // resolve value
  })
  .catch((err) => {
    // catch err code
  });

.throttleTime

const target = new RxPromise((resolve, reject) => {
  // code
});
target
  .throttleTime(1) // 1 second
  .then((value) => {
    // resolve value
  })
  .catch((err) => {
    // catch err code
  });