如何编写JavaScript Promise装饰器

伊加尔

我有一个预先存在的JavaScript函数,它返回一个promise。我这样称呼它

function on_success(result){
  //process result
}
foo(params).then(on_success)

我想编写包装函数bar,它将调用foo并测量执行时间。我想以完全相同的方式调用bar:

bar(params).then(on_success)

我该怎么做?

这就是我最后写的。这是@Sidney答案的简化版本

function bar(params){
    var start_time=new Date().getTime()
    function print_time(x){
        var end_time=new Date().getTime()
        console.log(end_time-start_time)
        return x
    }
    return foo(params).then(print_time)
}
西德尼

如果我理解您的问题,那么您正在寻找以下内容:

const myAsyncFunction = url =>
  fetch(url).then(res => res.text())
  
const timePromise = (promiseFn, ...args) => {
  const start = Date.now()
  return promiseFn(...args)
    .then(result => {
      console.log(`Promise finished in ${(Date.now() - start) / 1000} seconds`)
      return result
    }, error => {
      console.log(`Promise errored in ${(Date.now() - start) / 1000} seconds`)
      return Promise.reject(error)
    })
}

timePromise(myAsyncFunction, 'https://example.com')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章