From eb700de3ae88a281d4605e1c3e7acb1dbe0722a2 Mon Sep 17 00:00:00 2001 From: queicherius Date: Thu, 4 Oct 2018 21:10:40 +0100 Subject: [PATCH] Replace `promise-control-flow` with a custom implementation --- package.json | 3 +-- src/client.js | 2 +- src/endpoints/account-blob.js | 2 +- src/flow.js | 19 +++++++++++++++++++ tests/flow.spec.js | 28 ++++++++++++++++++++++++++++ 5 files changed, 50 insertions(+), 4 deletions(-) create mode 100644 src/flow.js create mode 100644 tests/flow.spec.js diff --git a/package.json b/package.json index 4528a15..242e266 100644 --- a/package.json +++ b/package.json @@ -25,8 +25,7 @@ "debounce": "^1.2.0", "fast-get": "^1.0.3", "idb-keyval": "^3.1.0", - "lets-fetch": "^2.1.2", - "promise-control-flow": "^1.2.5", + "lets-fetch": "^2.1.3", "querystringify": "^2.0.0" }, "devDependencies": { diff --git a/src/client.js b/src/client.js index 6108518..bd2e5be 100644 --- a/src/client.js +++ b/src/client.js @@ -1,7 +1,7 @@ const fetch = require('lets-fetch') -const flow = require('promise-control-flow') const nullCache = require('./cache/null') const endpoints = require('./endpoints') +const flow = require('./flow') module.exports = class Client { constructor () { diff --git a/src/endpoints/account-blob.js b/src/endpoints/account-blob.js index 4bfeebb..b9fe097 100644 --- a/src/endpoints/account-blob.js +++ b/src/endpoints/account-blob.js @@ -1,5 +1,5 @@ -const flow = require('promise-control-flow') const _get = require('fast-get') +const flow = require('../flow.js') const api = require('../index.js') function blob (parent) { diff --git a/src/flow.js b/src/flow.js new file mode 100644 index 0000000..ef51076 --- /dev/null +++ b/src/flow.js @@ -0,0 +1,19 @@ +async function parallel (promises) { + const results = await Promise.all( + Object.values(promises).map(func => func()) + ) + + // If the initial structure was an array, just return the array of results + if (Array.isArray(promises)) { + return results + } + + // If the initial structure was an object, rebuild an object with the results + const keys = Object.keys(promises) + return results.reduce((object, resultPart, index) => { + object[keys[index]] = resultPart + return object + }, {}) +} + +module.exports = { parallel } diff --git a/tests/flow.spec.js b/tests/flow.spec.js new file mode 100644 index 0000000..38fdafb --- /dev/null +++ b/tests/flow.spec.js @@ -0,0 +1,28 @@ +/* eslint-env jest */ +const flow = require('../src/flow') + +describe('flow', () => { + it('handles parallel promises with an object', async () => { + const result = await flow.parallel({ + a: () => Promise.resolve('AAA'), + b: () => Promise.resolve('BBB') + }) + + expect(result).toEqual({ + a: 'AAA', + b: 'BBB' + }) + }) + + it('handles parallel promises with an array', async () => { + const result = await flow.parallel([ + () => Promise.resolve('AAA'), + () => Promise.resolve('BBB') + ]) + + expect(result).toEqual([ + 'AAA', + 'BBB' + ]) + }) +})