【问题标题】:typescript convert to asynchronous打字稿转换为异步
【发布时间】:2019-10-16 07:14:43
【问题描述】:

我有以下功能:

function f (x : number): number {
 return 1/x
}

function g (x : number): number {
 return x*x
}

function h (x : number): number {
 return f(g(x))
}

我正在尝试将 h(如果需要也可以使用 g 和 f)转换为异步函数,仅使用 回调而不是承诺,但我坚持这样做。

我知道每个函数都应该有一个函数回调作为参数,但我不知道该怎么做。

【问题讨论】:

  • 这些本质上是同步函数;将它们转换为异步是什么意思?

标签: typescript asynchronous callback


【解决方案1】:

我们可以从提供错误管理示例的f 开始:

function f(x: number, cb: (err: any, result?: number) => void): void {
  if (x === 0)
    cb(new Error("Cannot call 'f' with zero"))
  else
    cb(null, 1/x)
}

这里是如何使用它:

f(5, (err, result) => {
  if (!err)
    console.log("… do something with:", result)
})

g 函数很简单:

function g(x: number, cb: (err: any, result?: number) => void): void {
    cb(null, x * x)
}

h 看起来就像一个老式的回调地狱:

function h(x: number, cb: (err: any, result?: number) => void): void {
    g(x, (err, gResult) => {
        if (err)
            cb(err)
        else
            f(gResult, cb)
    })
}

感谢这一刻的怀旧。

【讨论】:

  • 不过,这并没有什么异步的。这只是非常尴尬的同步代码:)
  • @JohnnyHK 我假设问题中描述的操作代表异步的东西。我们可以写setTimeout,但这可能不是作者想要的。
猜你喜欢
  • 1970-01-01
  • 2016-04-19
  • 2020-03-01
  • 2022-11-17
  • 2019-01-08
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
相关资源
最近更新 更多