我正在尝试使用新方法扩展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);
});