目录

取消 promise

有些需求中,有取消 promise 的需求, 但是原生函数又没有取消的方法,于是手动实现一个 getPromiseWithAbort

借助 Promise.race() 方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/**
 *
 * @param p 传入一个正在执行的 promise
 */
function getPromiseWithAbort(p) {
  let obj = {};
  //内部定一个新的promise,用来终止执行
  let p1 = new Promise(function (resolve, reject) {
    obj.abort = reject;
  });
  obj.promise = Promise.race([p, p1]);
  return obj;
}

// 使用

var promise = new Promise((resolve) => {
  setTimeout(() => {
    resolve("123");
  }, 3000);
});

var obj = getPromiseWithAbort(promise);

obj.promise.then((res) => {
  console.log(res);
});

//如果要取消
obj.abort("取消执行");

参考链接: