【发布时间】:2016-12-14 16:53:19
【问题描述】:
当我们在 nodejs 中使用 Promise 时,给定一个 Promise p,我们无法通过在“then”回调中记录 currentTime 来知道 Promise p 何时真正解决。
为了证明这一点,我编写了下面的测试代码(使用 CoffeeScript):
# the procedure we want to profile
getData = (arg) ->
new Promise (resolve) ->
setTimeout ->
resolve(arg + 1)
, 100
# the main procedure
main = () ->
beginTime = new Date()
console.log beginTime.toISOString()
getData(1).then (r) ->
resolveTime = new Date()
console.log resolveTime.toISOString()
console.log resolveTime - beginTime
cnt = 10**9
--cnt while cnt > 0
return cnt
main()
当您运行上述代码时,您会注意到 resolveTime(您的代码运行到回调函数的时间)比 beginTime 晚了 100 毫秒。
所以如果我们想知道 Promise 何时真正解决,如何?
我想知道确切的时间,因为我正在通过日志记录进行一些分析。当我在黑盒之外进行一些分析时,我无法修改 Promise p 的实现。
那么,是否有类似 promise.onUnderlyingConditionFulfilled(callback) 之类的函数,或者任何其他方式可以实现这一点?
【问题讨论】:
-
你为什么想知道那个时间?
-
实际!== 预测。没有惊喜。
-
@Bergi 因为我正在通过日志记录进行一些分析,我需要知道 http 请求何时实际响应,而不受其他代码的影响。
-
@Roamer-1888 我不明白你的意思...对不起我的英语水平不佳
-
@luochen1990 为此,请使用性能计时 API。它可以让您获得 http 请求的时间戳,甚至当时还没有处于活动状态。
标签: node.js promise es6-promise