【问题标题】:chain promise and functions链式承诺和功能
【发布时间】: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


【解决方案1】:

你已经把一些非常简单的事情复杂化了 - 直接承诺链,没有必要尝试做你用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');
               });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2017-01-23
    • 2018-03-31
    • 1970-01-01
    • 2023-04-01
    • 2018-04-19
    相关资源
    最近更新 更多