Javascript承诺-传播和添加其他方法
是否可以执行以下功能Javascript承诺-传播和添加其他方法,javascript,node.js,Javascript,Node.js,是否可以执行以下功能 const method = () => { let _reject; const promise = new Promise((resolve, reject) => { _reject = reject; ... }); return { ...promise, cancel: () => _reject('cancelled'), } } i、 e.我可以
const method = () => {
let _reject;
const promise = new Promise((resolve, reject) => {
_reject = reject;
...
});
return {
...promise,
cancel: () => _reject('cancelled'),
}
}
i、 e.我可以做如下事情:
const promise = method();
// now I have promise.then, promise.catch and promise.cancel
这只是一个例子;我希望能够向这个“承诺”对象添加额外的属性。看到这个答案了吗
您可能需要扩展专门的Promise类
class CancelablePromise扩展了承诺{
取消(){}
}
不,您不能传播promise实例,因为它会失去其原型(方法),但您可以像添加任何对象一样向其添加属性:
promise.cancel = () => _reject('cancelled');
return promise;
(请注意,我并不是说这是个好主意)您可以执行以下操作:
const _resolve= Symbol('resolve');
const _reject= Symbol('reject');
class ExPromise extends Promise{
constructor(executor) {
let resolve, reject;
super((_resolve, _reject) => {
resolve = _resolve;
reject = _reject;
executor(resolve, reject);
});
this[_resolve]= resolve;
this[_reject]= reject;
}
cancel(){
this[_reject](new Error('canceled'));
}
}
如果需要取消嵌套的承诺或其他一些额外功能,可以尝试该包请记住,这个假设的
cancel()
方法实际上不会终止承诺构造函数启动的异步代码。