Skip to content

Commit

Permalink
refactor(delay): move from prototype to constructor
Browse files Browse the repository at this point in the history
It makes more sense to create an Promise of delay form delay an existing one(method replaced by
sleep #a75a15b).

BREAKING CHANGE: The api of the method changed because of the move to constructor and the method is
no longer on prototype.
  • Loading branch information
yisraelx committed Sep 13, 2017
1 parent a75a15b commit f59f19d
Show file tree
Hide file tree
Showing 6 changed files with 20 additions and 31 deletions.
1 change: 1 addition & 0 deletions modules/-constructor/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
export { default as compose } from '@promises/compose';
export { default as Promises } from '@promises/core';
export { default as create } from '@promises/create';
export { default as delay } from '@promises/delay';
export { default as exec } from '@promises/exec';
export { default as isPromise } from '@promises/is-promise';
export { default as promisify, PromisifyOptions } from '@promises/promisify';
Expand Down
1 change: 1 addition & 0 deletions modules/-constructor/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
"@promises/compose": "^0.1.0",
"@promises/core": "^0.1.0",
"@promises/create": "^0.1.0",
"@promises/delay": "^0.1.0",
"@promises/exec": "^0.1.0",
"@promises/interfaces": "^0.1.0",
"@promises/is-promise": "^0.1.0",
Expand Down
1 change: 0 additions & 1 deletion modules/-prototype/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
*/

export { default as Promises } from '@promises/core';
export { default as delay } from '@promises/delay';
export { default as error } from '@promises/error';
export { default as everyParallel } from '@promises/every-parallel';
export { default as everySeries } from '@promises/every-series';
Expand Down
1 change: 0 additions & 1 deletion modules/-prototype/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
},
"dependencies": {
"@promises/core": "^0.1.0",
"@promises/delay": "^0.1.0",
"@promises/error": "^0.1.0",
"@promises/every-parallel": "^0.1.0",
"@promises/every-series": "^0.1.0",
Expand Down
22 changes: 10 additions & 12 deletions modules/delay/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,32 @@ import Promises from '@promises/core';
* @example
*
* ```typescript
* let promises: Promises<string> = Promises.resolve<string>('foo');
* delay(promises, 3000).then((result: string) => {
* console.log(result); // result => 'foo'
* delay(3000).then(() => {
* console.log('timeout'); // => 'timeout'
* });
* ```
*/
function delay<T>(value?: Promises<T> | T, ms?: number): Promises<T> {
function delayStatic<T>(ms?: number): Promises<T> {
return new Promises<T>((resolve) => {
setTimeout(() => resolve(value), ms);
setTimeout(() => resolve(), ms);
});
}

export default delay;
export default delayStatic;

Promises._setOnPrototype('delay', delay);
Promises._setOnConstructor('delay', delayStatic);

declare module '@promises/core' {
interface Promises<T> {
namespace Promises {
/**
* @example
*
* ```typescript
* let promises: Promises<string> = Promises.resolve<string>('foo');
* promises.delay(3000).then((result: string) => {
* console.log(result); // result => 'foo'
* Promises.delay(3000).then(() => {
* console.log('timeout'); // => 'timeout'
* });
* ```
*/
delay(ms?: number): Promises<T>;
export let delay: typeof delayStatic;
}
}
25 changes: 8 additions & 17 deletions test/delay.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,14 @@ import Promises from '@promises/core';
import delay from '@promises/delay';

describe('delay', () => {

it('should be resolve after delay', () => {
let promise: any = Promises.resolve('foo');
let delayPromises = delay(promise, 1);

return delayPromises.then((result: string) => {
expect(result).toBe('foo');
it('should be return promise with delay', () => {
let delayPromise = delay(2);
let pass = false;
setTimeout(() => {
pass = true;
}, 1);
return delayPromise.then(() => {
expect(pass).toBeTruthy();
});
});

it('should be reject after delay', () => {
let promise: any = Promises.reject('error');
let delayPromises = delay(promise, 1);

return delayPromises.catch((error: string) => {
expect(error).toBe('error');
});
});

});

0 comments on commit f59f19d

Please sign in to comment.