Javascript. Преобразование синхронной функции в асинхронную с использованием обратных вызовов, обещаний, асинхронных / ожидающих, генераторов - PullRequest
0 голосов
/ 27 марта 2019

У меня есть две функции, ранее предназначенные для синхронного запуска.

function addOne(recievedInt) {
   ...some network requests happend...
   return recievedInt = receivedInt++;
}

и

function sum(arg1, arg2) {
   ... do some manipulations...
   return arg1 + arg2;
}

Последние оба были изменены на асинхронные с помощью обратных вызовов и выглядят следующим образом: функция

addOne(recievedInt, callback),  sum(arg1, arg2, callback)

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

function compute(value) {
   var c = addOne(value);
   var a = sum(value, c) + c;
   return a;
}

Моими лучшими решениями были:

function compute(value) {
   return addOne(value, function(n1) {
      return sum(value, n1, function(n2) {
         return n2 + n1;
      });
   });
}

Это правильная реализация для асинхронной версии на основе обратного вызова?И как его можно конвертировать, используя async / await, генераторы, Promises

1 Ответ

0 голосов
/ 27 марта 2019

Вот один из способов, которым вы могли бы реорганизовать свой исходный код в async / await (без использования обратных вызовов):

const fakeAsyncStuff = () => Promise.resolve();

const addOne = async n => {
  await fakeAsyncStuff();
  return n + 1;
};

const sum = async (a, b) => {
  await fakeAsyncStuff();
  return a + b;
};

const compute = async value => {
  const c = await addOne(value);
  const a = await sum(value, c);
  return c + a;
};

compute(1).then(console.log);
...