在javascript中扩展承诺
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在javascript中扩展承诺,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1782字,纯文字阅读大概需要3分钟。
内容图文
我正在学习javascript中的类和继承.我认为以下是扩展现有对象的一种相当标准的方法,因为我从MDN docs on Object.create获得了样式
我期待看到’好’,然后’耶!你好’在控制台,但我发现这个错误:
Uncaught TypeError: #<MyPromise> is not a promise
at new MyPromise (<anonymous>:5:17)
at <anonymous>:19:6
看起来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);});
我原本试图制作一个你可以使用的BatchAjax类:
(new BatchAjax([query1, query2]))
.then(function(response) {console.log('Fires when all queries are complete.');});
这真的很有趣.
解决方法:
本机Promise类(如Error和Array)无法使用旧的ES5样式的子类机制正确子类化.
子类化Promise的正确方法是通过类语法:
class MyPromise extends Promise {
}
例:
class MyPromise extends Promise {
fail(...args) {
return this.catch(...args);
}
}
const p = new MyPromise((resolve, reject) => {
setTimeout(() => {
reject("error here");
}, 0);
});
p.fail(error => {
console.log("failed: " + error);
});
你可能也可以使用大多数ES5风格加上Reflect.construct,但是如果你有Reflect.construct,你就有了课程,所以…实际上,我没有立即运气,尤其是因为你只能这样做用类构造函数调用它,所以你仍然需要使用类…
内容总结
以上是互联网集市为您收集整理的在javascript中扩展承诺全部内容,希望文章能够帮你解决在javascript中扩展承诺所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。