машинопись конвертировать в асинхронный - PullRequest
1 голос
/ 30 мая 2019

У меня есть следующие функции:

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, если необходимо) также в асинхронную функцию только с обратными вызовами, а не с обещаниями , ноЯ застрял с этим.

Я знаю, что каждая функция должна иметь функцию обратного вызова в качестве параметра, но я не уверен, как это сделать.

1 Ответ

3 голосов
/ 30 мая 2019

Мы можем начать с 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)
    })
}

Спасибо за этот момент ностальгии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...