node.js - 节点测量执行时间 - 从作为参数传递给另一个函数的异步返回值
问题描述
我想编写一个函数来测量可能返回值的部分代码(其他方法)的性能。这是我此刻出来的:
const fn = async (): Promise<any> => {
setTimeout(async (): Promise<any> => {
return new Promise((resolve) => resolve('Hello World!'));
}, 3000);
};
async measure(fn: () => Promise<any>): Promise<any> {
const startTime = this.performance.now();
const result = await functionToMeasure();
const endTime = this.performance.now();
const executionTime = endTime - startTime;
console.log(`Executed in ${executionTime} ms`);
return result;
}
const result = async measure(functionToMeasure); // result is undefined
结果是functionToMeasure
实际运行但它从不返回任何东西,目前我只能将它与void
函数一起使用。
如果可能的话,我想修复它,或者如果有更好的方法,我可以完全改变它。
编辑:
实际代码
const callback = async (): Promise<any> => {
return await doSomethingAndReturn();
};
const searchResults: string[] = await measure(callback);
我必须包装doSomethingAndReturn
异步承诺吗?
解决方案
您需要将setTimeout
调用包装在一个 Promise 中,然后解析结果,所以它应该看起来像这样:
const {performance} = require('perf_hooks');
async function executeAndMeasure(fn) {
const startTime = performance.now();
const result = await fn();
const endTime = performance.now();
const executionTime = endTime - startTime;
console.log(`Executed in ${executionTime} ms`);
return result;
}
function someFnThatReturnsAPromise() {
return new Promise(resolve => {
setTimeout(() => {
resolve("Hello World");
}, 3000);
})
}
async function someAsyncFunction() {
return 123;
}
(async () => {
let result = await executeAndMeasure(someFnThatReturnsAPromise);
console.log(`result was ${result}`);
result = await executeAndMeasure(someAsyncFunction);
console.log(`result was ${result}`);
})();
推荐阅读
- javascript - 通过电子邮件发送 onclick 按钮以检索用户电子邮件
- linq - 如何在 Linq Where 子句中有变量?
- ios - NSURLSessions 和 HLS 视频缓存 - 部分下载无法删除
- python - python中使用Del的双向链表
- r - 尝试在 R 中运行friedman.test 时错误提示dim(x) 必须具有正长度
- android - Can I duplicate a Layout changing inside Strings?
- javascript - Electron: how to make the Edit menu automatically enable/disable based on context
- curl - 使用 curl + Bearer Token 访问非公共 Google 协作平台页面
- xaml - UWP XAML:是否可以使用 XAML 行为来更改列表框中所选项目的外观?
- python-3.x - urllib urlopen [WinError 10061]