Compare commits

..

6 Commits

Author SHA1 Message Date
d922c691ed 3.0.7 2020-10-15 18:02:14 +00:00
5aecc44ad7 fix(core): update 2020-10-15 18:02:14 +00:00
f7492c4656 3.0.6 2019-10-01 18:06:29 +02:00
63dd46ed49 fix(core): update 2019-10-01 18:06:29 +02:00
984c2bc9d8 3.0.5 2019-09-11 16:44:21 +02:00
16030d5ee8 fix(core): update 2019-09-11 16:44:21 +02:00
4 changed files with 38 additions and 23 deletions

8
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "@pushrocks/smartpromise", "name": "@pushrocks/smartpromise",
"version": "3.0.4", "version": "3.0.7",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {
@ -453,9 +453,9 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "10.5.1", "version": "12.7.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.1.tgz", "resolved": "https://verdaccio.lossless.one/@types%2fnode/-/node-12.7.5.tgz",
"integrity": "sha512-AFLl1IALIuyt6oK4AYZsgWVJ/5rnyzQWud7IebaZWWV3YmgtPZkQmYio9R5Ze/2pdd7XfqF5bP+hWS11mAKoOQ==", "integrity": "sha512-9fq4jZVhPNW8r+UYKnxF1e2HkDWOWKM5bC2/7c9wPV835I0aOrVbS/Hw/pWPk2uKrNXQqg9Z959Kz+IYDd5p3w==",
"dev": true "dev": true
}, },
"@types/vinyl": { "@types/vinyl": {

View File

@ -1,7 +1,7 @@
{ {
"name": "@pushrocks/smartpromise", "name": "@pushrocks/smartpromise",
"private": false, "private": false,
"version": "3.0.4", "version": "3.0.7",
"description": "simple promises and Deferred constructs", "description": "simple promises and Deferred constructs",
"main": "dist/index.js", "main": "dist/index.js",
"typings": "dist/index.d.ts", "typings": "dist/index.d.ts",
@ -24,7 +24,7 @@
"@gitzone/tsbuild": "^2.1.17", "@gitzone/tsbuild": "^2.1.17",
"@gitzone/tstest": "^1.0.24", "@gitzone/tstest": "^1.0.24",
"@pushrocks/tapbundle": "^3.0.13", "@pushrocks/tapbundle": "^3.0.13",
"@types/node": "^10.5.1", "@types/node": "^12.7.5",
"tslint": "^5.20.0", "tslint": "^5.20.0",
"tslint-config-prettier": "^1.18.0" "tslint-config-prettier": "^1.18.0"
}, },

View File

@ -1,27 +1,27 @@
import { expect, tap } from '@pushrocks/tapbundle'; import { expect, tap } from '@pushrocks/tapbundle';
import * as q from '../ts/index'; import * as smartpromise from '../ts/index';
tap.test('should return a Deferred for .defer()', async () => { tap.test('should return a Deferred for .defer()', async () => {
let myDeferred = q.defer(); const myDeferred = smartpromise.defer();
let expectPromise = expect(myDeferred.promise).to.eventually.be.fulfilled; const expectPromise = expect(myDeferred.promise).to.eventually.be.fulfilled;
myDeferred.resolve(); myDeferred.resolve();
return expectPromise; return expectPromise;
}); });
tap.test('should let types flow through the Promise', async () => { tap.test('should let types flow through the Promise', async () => {
let myString = 'someString'; const myString = 'someString';
let myDeferred = q.defer<string>(); const myDeferred = smartpromise.defer<string>();
let expectPromise = expect(myDeferred.promise).to.eventually.equal('someString'); const expectPromise = expect(myDeferred.promise).to.eventually.equal('someString');
myDeferred.resolve(myString); myDeferred.resolve(myString);
return expectPromise; return expectPromise;
}); });
tap.test('should map callbacks', async () => { tap.test('should map callbacks', async () => {
let inputArray = ['hi', 'awesome']; const inputArray = ['hi', 'awesome'];
const myPromisified = async myInput => { const myPromisified = async myInput => {
return myInput; return myInput;
}; };
const expectPromise = expect(q.map(inputArray, myPromisified)).to.eventually.deep.equal( const expectPromise = expect(smartpromise.map(inputArray, myPromisified)).to.eventually.deep.equal(
inputArray inputArray
); );
return expectPromise; return expectPromise;

View File

@ -42,21 +42,21 @@ export class Deferred<T> {
} }
} }
export let defer = <T>() => { export const defer = <T>() => {
return new Deferred<T>(); return new Deferred<T>();
}; };
/** /**
* Creates a new resolved promise for the provided value. * Creates a new resolved promise for the provided value.
*/ */
export let resolvedPromise = <T>(value?: T): Promise<T> => { export const resolvedPromise = <T>(value?: T): Promise<T> => {
return Promise.resolve(value); return Promise.resolve(value);
}; };
/** /**
* Creates a new rejected promise for the provided reason. * Creates a new rejected promise for the provided reason.
*/ */
export let rejectedPromise = err => { export const rejectedPromise = (err) => {
return Promise.reject(err); return Promise.reject(err);
}; };
@ -64,16 +64,31 @@ interface IAsyncFunction<T> {
(someArg: T): Promise<T>; (someArg: T): Promise<T>;
} }
export let map = async <T>(inputArg: T[], functionArg: IAsyncFunction<T>) => { /**
let promiseArray: Promise<any>[] = []; * accepts an array of inputs and a function that accepts the input.
let resultArray = []; * runs all items with the function and returns the result array when all items have run
for (let item of inputArg) { * @param inputArg
let promise: Promise<any> = functionArg(item); * @param functionArg
*/
export const map = async <T>(inputArg: T[], functionArg: IAsyncFunction<T>) => {
const promiseArray: Promise<any>[] = [];
const resultArray = [];
for (const item of inputArg) {
const promise: Promise<any> = functionArg(item);
promiseArray.push(promise); promiseArray.push(promise);
promise.then(x => { promise.then((x) => {
resultArray.push(x); resultArray.push(x);
}); });
} }
await Promise.all(promiseArray); await Promise.all(promiseArray);
return resultArray; return resultArray;
}; };
export const timeoutWrap = (ms, promise) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject(new Error('timeout'));
}, ms);
promise.then(resolve, reject);
});
};