警告:console.timeEnd()没有这样的标签“ RESPONSE TIME”

时间:2019-05-21 19:01:48

标签: javascript node.js express asynchronous

情况:

我有一个Node.js api,它在网站上每秒被调用多次。我正在使用UPDATE TABLE_B SET status = 3 WHERE ( status = 1 OR status IS NULL ) AND b_id = 39 AND m_id = 2 AND NAME NOT IN (SELECT NAME FROM TABLE_A WHERE b_id = 39 AND m_id = 2) console.time('RESPONSE TIME')来衡量api对每个请求响应客户端所花费的时间。 在api内部,我正在使用console.timeEnd('RESPONSE TIME')汇总来自4个不同api的响应,然后根据这4个api返回的内容返回最终响应。

问题:

除了偶尔记录的Promise.all()警告以外,所有其他操作均按预期进行。为什么会这样,如何正确避免这种情况?

我推测这是因为Node是异步的,尽管一个请求可能仍在等待它的4个api响应,但另一个请求将已经完成并按Warning: No such label 'RESPONSE TIME' for console.timeEnd()结束两个计时器,因为它们共享相同的名称。但是我在任何地方都找不到答案。

1 个答案:

答案 0 :(得分:5)

您的猜测是正确的,您应该为每个api调用使用唯一的标签名称。 假设每个请求在req.id中都有一个唯一的标识符,则可以使用以下代码:

console.time(`RESPONSE TIME request ${req.id}`)
// await api call
console.timeEnd(`RESPONSE TIME request ${req.id}`)