在瀑布链接承诺

时间:2016-11-13 23:18:06

标签: node.js es6-promise

我一直在玩几种不同的方式来链接一系列功能,而且似乎找不到我特别喜欢的功能。以下是我最后决定但仍然不热衷的事情。

有人可以建议更清洁,更简洁的模式吗?我不想选择Async.js或库。

[
  this.connectDatabase.bind(this),
  this.connectServer.bind(this),
  this.listen.bind(this)
].reduce(
  (chain, fn) => {
    let p = new Promise(fn);
    chain.then(p);
    return p;
  },
  Promise.resolve()
);

聚苯乙烯。任何其他提示都受到欢迎。

2 个答案:

答案 0 :(得分:6)

在stackoverflow上找到了关于如何动态链接promise的解决方案:

iterable.reduce((p, fn) => p.then(fn), Promise.resolve())

完整的帖子在这里:https://stackoverflow.com/a/30823708/4052701

答案 1 :(得分:2)

ES7 async / await怎么样? 在您的代码中使用奇怪/旧的绑定(this),但不要与您的示例混淆。

async function x() {
    try {
        await this.connectDatabase.bind(this);
        await this.connectServer.bind(this);
        await this.listen.bind(this);
    } catch(e) {
        throw e;
    }
}

或更通用的

async function () {
    for (let item of yourArray) {
        try {
            await item.bind(this); //strange bind of your code.
        } catch(e) {
            throw e;
        }
    }
}