我正在尝试使用新方法扩展javascript的 promise 。在这种情况下,此新方法称为foo,它实际上是这样的:

Promise.foo = function(arg) {
  return this.then( function(result) {
    return result.foo(arg);
  });
};

简而言之,foo()函数是一种等待 promise 解决的快捷方式,然后在结果上调用foo()。

该函数的本质是可以链接,就像then()可以链接一样。
myPromise.foo(a).foo(b).foo(c);

我觉得这应该可行,但是我不确定什么是正确的道路。

这是我尝试过的:
var FooPromise = function() {
   Promise.apply(this, arguments);
}

FooPromise.prototype = Object.create(Promise.prototype);
FooPromise.foo = function(arg) {
  return this.then( function(result) {
    return result.foo(arg);
  });
};

要测试一下:
var test = new FooPromise(function(res, rej) {
   res('bla');
});

在Firefox中,这给了我:
TypeError: calling a builtin Promise constructor without new is forbidden

在节点中:
TypeError: #<Promise> is not a promise

这仅仅是对javascript的限制,还是有办法解决?

最佳答案

ES6方式:

class FooPromise extends Promise {
    constructor(executor) {
        super(executor);
    }
}

var fooPromise = new FooPromise((resolve,reject)=>{
   resolve(null);
});

10-07 16:56