连锁承诺和功能

时间:2017-07-17 09:57:00

标签: javascript promise

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

仅适用于函数(在消息之后解析Promise:finished)。

有一种方法可以实现我想要的,而不需要if参数的类型吗?

这是我的游乐场:https://jsbin.com/vuxakedera/edit?js,console

由于

1 个答案:

答案 0 :(得分:2)

你过于复杂的事情非常简单 - 直接承诺链,没有必要尝试用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');
               });

相关问题