我想做一种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');
               });

07-24 16:14