情况:
我有一个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()
结束两个计时器,因为它们共享相同的名称。但是我在任何地方都找不到答案。
答案 0 :(得分:5)
您的猜测是正确的,您应该为每个api调用使用唯一的标签名称。 假设每个请求在req.id中都有一个唯一的标识符,则可以使用以下代码:
console.time(`RESPONSE TIME request ${req.id}`)
// await api call
console.timeEnd(`RESPONSE TIME request ${req.id}`)