diff --git a/packages/core/lib/utils/promise.js b/packages/core/lib/utils/promise.js index d4014c955..631e9f9f2 100644 --- a/packages/core/lib/utils/promise.js +++ b/packages/core/lib/utils/promise.js @@ -1,5 +1,18 @@ // Generated by CoffeeScript 2.5.1 module.exports = { + array_filter: async function(arr, handler) { + var fail; + fail = Symbol(); + return ((await Promise.all(arr.map(async function(item) { + if ((await handler(item))) { + return item; + } else { + return fail; + } + })))).filter(function(i) { + return i !== fail; + }); + }, is: function(obj) { return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; } diff --git a/packages/core/src/utils/promise.coffee b/packages/core/src/utils/promise.coffee index 8eabb0a36..24d78824f 100644 --- a/packages/core/src/utils/promise.coffee +++ b/packages/core/src/utils/promise.coffee @@ -1,5 +1,11 @@ module.exports = + array_filter: (arr, handler) -> + fail = Symbol() + ( + await Promise.all arr.map (item) -> + if await handler(item) then item else fail + ).filter (i) -> i isnt fail is: (obj) -> # promise && !!promise.then return !!obj and (typeof obj is 'object' || typeof obj is 'function') and typeof obj.then is 'function' diff --git a/packages/core/test/utils/promise.coffee b/packages/core/test/utils/promise.coffee index fc98f30dd..5a58f575f 100644 --- a/packages/core/test/utils/promise.coffee +++ b/packages/core/test/utils/promise.coffee @@ -4,9 +4,19 @@ promise = require '../../src/utils/promise' describe 'utils.promise', -> return unless tags.api + + describe 'array_filter', -> + + it 'filter', -> + result = await promise.array_filter [1,2,3,4], (el) -> + new Promise (resolve) -> + setImmediate -> resolve el % 2 is 0 + result.should.eql [2, 4] + + describe 'is', -> - it 'true', -> - promise.is(new Promise (->)).should.be.true() + it 'true', -> + promise.is(new Promise (->)).should.be.true() - it 'false', -> - promise.is({}).should.be.false() + it 'false', -> + promise.is({}).should.be.false()