中断Promise

85 阅读1分钟
function abortWrapper(p1: Promise<any>) {
  let abort
  let p2 = new Promise((resolve, reject) => (abort = reject)) // 永远的pending状态,不会终止
  let p = Promise.race([p1, p2]) // 返回到第一个成功或者失败的promise 因为p2永远都是pending状态,所以它不会被使用
  p.abort = abort
  return p
}
const aa = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("成功");
  }, 2000)
​
})
const targetAA = abortWrapper(aa)
targetAA.abort("中断promise")
targetAA.then((res) => {
  console.log("res", res); // 没有打印
})