问:是否存在通过参数数组调用某些 promise 并 "all"- 化它而无需样板 for-each 代码的功能?

Q: Does functionality exist to invoke some promise over an array of arguments and "all"-ify it without boilerplate for-each code?

我一直在努力在标题中简洁地描述这一点,所以我将粘贴实现我所说内容的打字稿代码 -

aggregate<T, A>(args: A[], invokable: (arg: A) => promise<T>): promise<T[]> {
    let allPromises = new Array<promise<T>>();
    for (let arg of args) {
        allPromises.push(invokable(arg));
    }
    return promise.all(allPromises);
}

这需要一个类型 A 的参数列表,并为每个参数调用一些函数(returns 一个 returns 类型 T 的承诺)。这些承诺中的每一个都被收集到一个列表中,然后 all-ified 并返回。

我的问题是,此功能是否已经存在于 Bluebird 中,因为我宁愿正确地做事并使用现有的、经过测试的功能!我无法理解一些文档,所以我可能没有理解我应该拥有的东西!

你的问题完全可以用 Array.prototype.map 解决。

您的代码可以变成:

aggregate<T, A>(args: A[], invokable: (arg: A) => promise<T>): promise<T[]> {
    return promise.all(args.map(invocable));
}