Skip to content

Commit 7a33ea9

Browse files
committed
feat: add futures
1 parent ea22542 commit 7a33ea9

File tree

3 files changed

+34
-6
lines changed

3 files changed

+34
-6
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ Returns the first item in the `list` that matches `predicate` where `predicate`
4848

4949
Returns single dimensional array.
5050

51+
### `future()`
52+
53+
Returns a hash with `promise`, `resolve`, `reject` properties.
54+
5155
### `getArguments(fn)`
5256

5357
Returns a list of the arguments contained in the function `fn`.

spec/fauxdash.spec.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -574,5 +574,19 @@ describe('fauxdash', function () {
574574
})
575575
})
576576
})
577+
578+
describe('when creating futures', function () {
579+
it('should resolve correctly', function (done) {
580+
var { promise, resolve } = _.future()
581+
promise.then(() => done())
582+
resolve()
583+
})
584+
585+
it('should reject correctly', function (done) {
586+
var { promise, reject } = _.future()
587+
promise.then(null, () => done())
588+
reject()
589+
})
590+
})
577591
})
578592
})

src/index.js

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,15 @@ function flatten (list) {
145145
, [])
146146
}
147147

148+
function future () {
149+
let res, rej
150+
const promise = new Promise((resolve, reject) => {
151+
res = resolve
152+
rej = reject
153+
})
154+
return { promise, resolve: res, reject: rej }
155+
}
156+
148157
function getArguments (fn) {
149158
const source = fn.toString().replace(NYC_DEFAULT_REGEX, '')
150159
const match = ARGUMENT_REGEX.exec(source)
@@ -300,12 +309,12 @@ function memoize (fn) {
300309
if (set.has(args)) {
301310
return set[args]
302311
} else {
303-
var result = fn.apply(null, args)
312+
const result = fn.apply(null, args)
304313
set.add(args, result)
305314
return result
306315
}
307316
}
308-
memod.name = `memoized#{fn.name}`
317+
memod.name = 'memoized#{fn.name}'
309318
return memod
310319
}
311320

@@ -335,10 +344,10 @@ function mergeTwo (source, target) {
335344
}
336345

337346
target = target || new source.constructor()
338-
for (var key in source) {
339-
target[ key ] = typeof target[ key ] === 'undefined'
340-
? mergeTwo(source[ key ], null)
341-
: mergeTwo(source[ key ], target[ key ])
347+
for (const key in source) {
348+
target[key] = typeof target[key] === 'undefined'
349+
? mergeTwo(source[key], null)
350+
: mergeTwo(source[key], target[key])
342351
}
343352
return target
344353
}
@@ -485,6 +494,7 @@ module.exports = {
485494
find: find,
486495
filter: filter,
487496
flatten: flatten,
497+
future: future,
488498
getArguments: getArguments,
489499
getObjectTag: getObjectTag,
490500
has: has,

0 commit comments

Comments
 (0)