我想做一种Worker
,它执行可以承诺或不能承诺的功能列表。对于那个工人,我使用诺言。这是一个例子:
class PromiseChainer {
constructor() {
this.promise = Promise.resolve();
}
addToChain(f) {
this.promise = this.promise.then(() => Promise.resolve(f));
}
getPromise() {
return this.promise;
}
}
我想轻松地向链中添加函数或Promise,并确保这些函数将同步执行。
我测试了2个功能:
const p = new Promise(resolve =>
setTimeout(() => resolve(console.log('promise resolved')), 500));
const f = () => console.log('value resolved')
最后我有一个:
const promiseChainer = new PromiseChainer();
promiseChainer.addToChain(f);
promiseChainer.addToChain(p);
promiseChainer.getPromise().then(() => {
console.log('finished');
});
为了测试我的功能是否以正确的顺序执行。
问题是:我无法使此代码与Promises and Functions一起使用:
addToChain(f) {
this.promise = this.promise.then(() => Promise.resolve(f));
}
仅适用于Promise(从不显示
Value resolved
)addToChain(f) {
this.promise = this.promise.then(() => f);
}
仅适用于Promise(从不显示
Value resolved
)addToChain(f) {
this.promise = this.promise.then(f);
}
仅与功能一起使用(在消息:
finished
后解决承诺)。有一种方法可以实现我想要的参数类型?
这是我的游乐场:https://jsbin.com/vuxakedera/edit?js,console
谢谢
最佳答案
您已经使一些非常简单的事情变得复杂了-直接实现Promises链,无需尝试执行您使用PromiseChainer
实现的事情
const p = new Promise(resolve =>
setTimeout(() => resolve(console.log('promise resolved')), 500));
const f = () => console.log('value resolved')
var chain = Promise.resolve()
.then(f)
.then(() => p)
.then(() => {
console.log('finished');
});