promise-abortable
/** * Abortable Promise * * @author dondevi * @create 2019-05-27 */ import getAbortController from "./controller.js"; export default class AbortablePromise extends Promise { constructor (executor, abortController = getAbortController()) { super((resolve, reject) => { executor(resolve, reject, abortController.signal); }); this.abortController = abortController; } then (onFulfilled, onRejected) { return new AbortablePromise((resolve, reject, signal) => { const onSettled = (status, value, callback) => { if ("function" === typeof callback) { value = callback(value); if (value instanceof AbortablePromise) { Object.assign(signal, value.abortController.signal); } return resolve(value); } "resolved" === status && resolve(value); "rejected" === status && reject(value); } super.then( value => onSettled("resolved", value, onFulfilled), reason => onSettled("rejected", reason, onRejected) ); }, this.abortController); } // Equivalent to this.then(undefined, onRejected) // catch (onRejected) {} abort (reason) { return new AbortablePromise((resolve, reject) => { Promise.resolve().then(() => { this.abortController.abort(reason); this.then(resolve, reject); }); }, this.abortController); } static all (promises) { return new AbortablePromise((resolve, reject, signal) => { setPromisesAbort(promises, signal); Promise.all(promises).then(resolve, reject); }); } static race (promises) { return new AbortablePromise((resolve, reject, signal) => { setPromisesAbort(promises, signal); Promise.race(promises).then(resolve, reject); }); } }; /** * Set promises abort * @param {Array} promises - list of promise * @param {Object} signal - abort signal */ function setPromisesAbort (promises, signal) { signal.onabort = reason => { promises.forEach((promise) => { if (promise instanceof AbortablePromise) { promise.abort(reason).catch(error => error); } }); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南