From c3d04dc5ca5eb722fd3e3d71cc8818b8fbbf8514 Mon Sep 17 00:00:00 2001 From: James Date: Mon, 20 Apr 2020 19:29:24 -0400 Subject: [PATCH] revises field-level hooks to run in parallel --- src/fields/executeHooks.js | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/fields/executeHooks.js b/src/fields/executeHooks.js index 40eb6416e6..d856320b41 100644 --- a/src/fields/executeHooks.js +++ b/src/fields/executeHooks.js @@ -1,6 +1,3 @@ -/* eslint-disable no-await-in-loop */ -/* eslint-disable no-restricted-syntax */ - const executeFieldHooks = async (fields, data, hookName) => { if (Array.isArray(data)) { const postHookData = await Promise.all(data.map(async (row) => { @@ -12,16 +9,27 @@ const executeFieldHooks = async (fields, data, hookName) => { } const postHookData = { ...data }; + const hookPromises = []; - for (const field of fields) { + fields.forEach((field) => { if (typeof field.hooks[hookName] === 'function' && data[field.name]) { - postHookData[field.name] = await field.hooks[hookName](data[field.name]); + const hookPromise = async () => { + postHookData[field.name] = await field.hooks[hookName](data[field.name]); + }; + + hookPromises.push(hookPromise()); } if (field.fields && data[field.name]) { - postHookData[field.name] = await executeFieldHooks(field.fields, data[field.name], hookName); + const hookPromise = async () => { + postHookData[field.name] = await executeFieldHooks(field.fields, data[field.name], hookName); + }; + + hookPromises.push(hookPromise()); } - } + }); + + await Promise.all(hookPromises); return postHookData; };