Javascript。使用回调,promise,async / await,生成器将同步函数转换为异步函数

时间:2019-03-27 11:31:26

标签: javascript asynchronous callback synchronization

我有两个功能,以前被设计为可以同步运行。

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

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

最近都使用回调将其更改为异步,如下所示:function

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 :(得分:0)

这是您可以将原始代码重构为异步/等待(不使用回调)的一种方法:

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);