相关疑难解决方法(0)

在JavaScript中扩展Promise

我正在学习javascript中的类和继承。我认为以下是扩展现有对象的相当标准的方法,因为我从Object.createMDN文档中获得了样式

我期待看到“确定”,然后看到“是!控制台中的“ Hello”,但出现此错误:

Uncaught TypeError: #<MyPromise> is not a promise
at new MyPromise (<anonymous>:5:17)
at <anonymous>:19:6
Run Code Online (Sandbox Code Playgroud)

看起来Promise构造函数正在抛出异常,因为它可以告诉我给我初始化的对象不是一个简单的Promise。

我希望Promise构造函数初始化我的对象,就像它是一个Promise对象一样,这样我就可以扩展该类。他们为什么不编写Promise构造函数来使用这种通用模式?难道我做错了什么?为您加油!

MyPromise = function(message, ok) {
    var myPromise = this;
    this.message = message;
    this.ok = ok;
    Promise.call(this, function(resolve, reject) {
        if(this.ok) {
            console.log('ok');
            resolve(myPromise.message);
        } else {
            console.log('not ok');
            reject(myPromise.message);
        }   
    }); 
};  

MyPromise.prototype = Object.create(Promise.prototype);
MyPromise.prototype.constructor = MyPromise;

(new MyPromise('Hello', true))
    .then(function(response) {console.log('Yay! ' + response);})
    .except(function(error) {console.log('Aww! ' + error);});
Run Code Online (Sandbox Code Playgroud)

我最初试图制作一个可以使用的BatchAjax类,例如:

(new BatchAjax([query1, query2]))
    .then(function(response) {console.log('Fires when …
Run Code Online (Sandbox Code Playgroud)

javascript oop inheritance class promise

5
推荐指数
2
解决办法
6859
查看次数

重写Promise构造函数及其方法

我想覆盖Promise构造函数和Promise中的then方法。因此,每当有人创建一个新的Promise对象时,首先将执行我的代码,然后将调用原始的promise构造函数。

同样,当有人调用Promise的.then函数时,首先将执行我的代码,然后将执行该then函数的回调。

我试过了

var bind = Function.bind;
var unbind = bind.bind(bind);

function instantiate(constructor, args) {
    return new (unbind(constructor, null).apply(null, args));
}

var oldProto = Promise.prototype;
Promise = function() {
    console.log("Promise instantiated");
    var promise = instantiate(Promise, arguments);
    return promise;
};
Promise.prototype = oldProto;
Run Code Online (Sandbox Code Playgroud)

当使用

var myFirstPromise = new Promise((resolve, reject) => {
  setTimeout(function(){
    resolve("Success!"); // Yay! Everything went well!
  }, 250);
});

myFirstPromise.then((successMessage) => {
  console.log("Yay! " + successMessage);
});
Run Code Online (Sandbox Code Playgroud)

它导致无限循环,控制台充满了Promise instantiated日志。我还尝试了以下方法:

Promise = function(Promise) {
    MyPromise.prototype …
Run Code Online (Sandbox Code Playgroud)

javascript overriding prototype monkeypatching promise

5
推荐指数
0
解决办法
373
查看次数