【发布时间】:2017-07-17 18:29:38
【问题描述】:
我想做一种Worker,它执行一个可以是或不是承诺的函数列表。对于那个 Worker,我使用 Promise。这是一个例子:
class PromiseChainer {
constructor() {
this.promise = Promise.resolve();
}
addToChain(f) {
this.promise = this.promise.then(() => Promise.resolve(f));
}
getPromise() {
return this.promise;
}
}
我想轻松地向链中添加函数或承诺,并确保这些函数将同步执行。
我测试了两个函数:
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 和 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);
}
仅适用于函数(Promise 在消息后解决:finished)。
有一种方法可以在没有参数类型上的 if 的情况下实现我想要的?
这是我的游乐场:https://jsbin.com/vuxakedera/edit?js,console
谢谢
【问题讨论】:
-
你为什么要用
PromiseChainer来复杂化这件事 - 默认情况下,承诺会这样做,并且它适用于值和其他承诺! -
是的,但不是功能,这是我想要完成的
-
我不懂“但不是功能”
标签: javascript promise