javascript - 如何将返回承诺的函数推送到接受参数的数组
问题描述
所以我有一堆我正在做的 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。好像有点矫枉过正。
解决方案
有没有比上面更好的方法?
您的示例等效于:
promiseChain.push(functionPromise(params));
有没有一种好的、干净的方法来添加函数,这些函数返回 Promise 到一个数组(显然不执行它们)也接收参数
要添加函数而不执行它们:
array.push(functionPromise);
参数可以绑定到数组中的函数:
array.push(funcitonPromise.bind(funcitonPromise, ...params))
然后可以通过以下方式调用它们:
await Promise.all(array.map(func => func()));
推荐阅读
- python - 2 一次变换的数据帧乘法
- angular - 使用 rxjs 在 Angular 中转换 http 服务响应
- php - 如何让 Oracle 在查询中保留标识符的大小写?
- javascript - 如何设置在材质ui文本字段中弹出建议的方式
- typescript - 为什么 TypeORM 需要第二个参数 inverseSide 属性(即使它是可选的)
- c# - C# tor.net 演示解决方案(命名为 Tor.Test)dosnt open all onion links
- python - 无法使用 selenium 和 python 获取 instagram 搜索框
- android - 在 Android Q 中使用 FFMPEG 和 MediaStore Uri
- python - 如何在 python 日志记录模块中指定级别?
- python - 如何在模板 html django 中调用外键的字段