【发布时间】:2015-07-24 16:34:09
【问题描述】:
我对 es6 Promise 中 this 的上下文有点困惑。下面是一些使用Promise 处理异步函数的代码。
/**
* Generic recreation of apple photobooth on electron (javascript practice)
*/
class Photobooth {
constructor(height=320, width=320) {
this._height = 320;
this._width = 320;
this.video = video ? $(video) : $(document.createElement('video'));
}
getStream() {
return new Promise(function (resolve, reject) {
return navigator.webkitGetUserMedia({ video: true }, resolve, reject);
});
}
streamTo(stream, element) {
element.appendChild(self.video);
var self = this;
return new Promise(function (resolve, reject) {
self.video.attr('src', window.URL.createObjectUrl(stream));
self.video.on('loadedmetadata', function () {
self.video.get(0);
resolve();
});
});
}
}
我想实现如下所示的链接。
Photobooth
.getStream()
.streamTo(document.body);
Lodash 具有与链接类似的功能。
// gets sorted scores for class.
_([
{ name: 'Jeff', scores: [0.78, 0.85] },
{ name: 'Jessica', scores: [0.84, 0.68] },
{ name: 'Tim', scores: [0.92, 0.67] }
])
.pluck('scores')
.flatten()
.map(x => x * 100)
.sortBy()
.value();
如何在 javascript 中实现基于类的 Promise-chaining?
【问题讨论】:
-
您需要使用
then显式处理resolved事件。 lodash 示例没有使用承诺。 -
您当前的实现将用作
let inst = new Photobooth(); inst.getStream().then(stream => inst.streamTo(stream, document.body))。有理由不这样做吗? -
this和 promises 没有任何关系。
标签: javascript promise ecmascript-6 es6-promise