Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

Promise 技术细节(6)

  在一些异步操作的封装中,我们经常需要用到继承自 Promise 的对象。以前我们会写一堆请的代码来实现,实际上 ES6 的 Promise 这个构造器是通过 NewTarget 来判断是否是 new 出来的,虽然无法通过 Promise.call 来模拟实现,但是可以使用 ES6 的 class extends 来实现。
  对 Promise 直接 call 是没卵用的 Promise.call({}, resolve => resolve(123));   Chrome 和 Firefox 都抛出错误(不过好像低版本 Firefox 不会抛出) Uncaught TypeError: #<Object> is not a promise TypeError: Constructor Promise requires 'new'   而且对一个 Promise 对象包一层对象也是不可用的,比如 Object.create(Promise.resolve(123)).then(); TypeError: 'catch' called on an object that does not implement interface Promise.   然后我们只能这么玩 var pro = Promise.resolve(123); var obj = Object.create(pro); obj.then = pro.then.bind(pro); obj.then(result => console.log(result));   但是正确的玩法应该是这样的才对! class A extends Promise { log() { this.then(result => console.log(result)); } }; var a = new A(resolve => resolve(123)); a.log();   然而,ES6 的 class 目前在 Firefox 的稳定版上尚未支持。所以目前的状态是「革命尚未成功,同志还需努力」!
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^