首页 > 解决方案 > 如何将返回承诺的函数推送到接受参数的数组

问题描述

所以我有一堆我正在做的 mysql 调用,我希望通过将逻辑分离到它们自己的函数和我想要做的事情来使代码更简洁和更可重用,因为调用的数量可以一直增长,就是构建一个 promise 数组并通过Promise.all. 我已经熟悉这个概念,但通常我的方法是这样的:

const promiseChain = []

array.forEach(item => promiseChain.push(new Promise((resolve, reject) { ... logic }); 

或类似的东西。但是我不能放弃这样做,因为我想分离出所有的逻辑,所以现在我有一堆不同的函数,所有返回的承诺。我对现在可以使用什么语法感到有些困惑,现在只需将函数添加到数组而不实际调用它们。我确实看到了一个 SO 答案,其中指定了如下内容:

const array = [func1, func2]

虽然我认为这行不通,但我的函数都会有不同的参数。有没有一种好的、干净的方法来添加函数,这些函数将 promise 返回到也接收参数的数组(显然不执行它们)?还是只是这样:

promiseChain.push(new Promise((resolve, reject) => {
functionPromise(params).then(() => resolve()).catch(err => reject(err))
})

我想我要问的是,有没有比上面更好的方法?只是看起来比必要的代码更多,因为这些函数已经返回了 Promise。好像有点矫枉过正。

标签: javascriptes6-promise

解决方案


有没有比上面更好的方法?

您的示例等效于: promiseChain.push(functionPromise(params));

有没有一种好的、干净的方法来添加函数,这些函数返回 Promise 到一个数组(显然不执行它们)也接收参数

要添加函数而不执行它们: array.push(functionPromise);

参数可以绑定到数组中的函数:

array.push(funcitonPromise.bind(funcitonPromise, ...params))

然后可以通过以下方式调用它们:

await Promise.all(array.map(func => func()));

推荐阅读