From 93bab88cb4262a2fb3f908fd84eb626f59cd784c Mon Sep 17 00:00:00 2001 From: ruowan Date: Tue, 23 Jun 2020 05:40:34 +0000 Subject: [PATCH] Add async measure function --- README.md | 16 +++++++++++++++- package-lock.json | 2 +- package.json | 2 +- src/index.ts | 4 ++-- src/measure.ts | 12 ++++++++++++ 5 files changed, 31 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 274fd46..56281c6 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ class Test { } ``` -`measure` - measure time taken by a function to execute +`measure` - measure time taken by a sync function to execute ```js import { measure } from 'helpful-decorators'; @@ -75,6 +75,20 @@ class Test { } ``` +`measureAsync` - measure time taken by an async function to execute + +```js +import { measureAsync } from 'helpful-decorators'; + +class Test { + @measureAsync + async doSomething() { + // Call to doSomething took 0.35 milliseconds. + } +} +``` + + `Mixin` - this pattern is used to achieve multiple inheritance ```js import { Mixin } from 'helpful-decorators'; diff --git a/package-lock.json b/package-lock.json index fadfc26..34544b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "helpful-decorators", - "version": "2.0.3", + "version": "2.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 910147f..d3843c3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "helpful-decorators", - "version": "2.1.0", + "version": "2.2.0", "description": "Helpful decorators for typescript projects", "jest": { "moduleFileExtensions": [ diff --git a/src/index.ts b/src/index.ts index 2797514..1711e4d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -export { measure } from './measure'; +export { measure, measureAsync } from './measure'; export { delay } from './delay'; export { debounce } from './debounce'; export { throttle } from './throttle'; @@ -6,4 +6,4 @@ export { once } from './once'; export { Mixin } from './mixin'; export { memo } from './memoize'; export { bind } from './bind'; -export { SortBy } from './sortby'; \ No newline at end of file +export { SortBy } from './sortby'; diff --git a/src/measure.ts b/src/measure.ts index 16a50ce..c28da21 100644 --- a/src/measure.ts +++ b/src/measure.ts @@ -11,3 +11,15 @@ export function measure(target: any, propertyKey: string, descriptor: PropertyDe return descriptor; } + +export function measureAsync(target: any, propertyKey: string, descriptor: PropertyDescriptor): any { + const originalMethod = descriptor.value; + descriptor.value = async function(...args: any): Promise { + const start = performance.now(); + const result = await originalMethod.apply(this, args); + const end = performance.now(); + console.log(`Call to ${propertyKey} took ${(end-start).toFixed(2)} milliseconds.`); + return result; + }; + return descriptor; +}; \ No newline at end of file