createManualPromise(创建手动操作的 Promise)
- 简述:此方法创建的 Promise 支持手动跳过或中断,支持使用
AbortSignal
信号中断,原理上可跳出当前未执行的操作并返回自定义结果,适用于异步中断、超时检查等场景。 - 兼容性参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise#browser_compatibility
源码
/**
* 创建手动操作的 Promise (可跳过或中断)
* @param {Function|Promise} executor 处理方法 ( Function | Promise: 仅pending状态可手动操作) )
* @param {Object} [options] 配置项
* @param {Function} [options.abort] 中断方法
* @param {AbortSignal} [options.signal] 中断信号
* @return {Promise} Promise: { then, catch, finally, next: 跳过方法, abort: 中断方法, aborted: 是否已中断, abortedReason: 中断原因, throwIfAborted: 中断时抛出异常方法 }
*/
function createManualPromise(executor, options) {
let {
abort, signal = {
} } = options || {
}
let aborted = signal.aborted || false
let resolve, reject, properties = {
then: {
value() {
return manual(Promise.prototype.then.apply(this, arguments)) } },
catch: {
value() {
return manual(Promise.prototype.catch.apply(this, arguments)) } },
finally: {
value() {
return manual(Promise.prototype.finally.apply(this, arguments)) } },
next: {
value