簡體   English   中英

的JavaScript。 使用回調,promises,async / await,generator將同步函數轉換為異步

[英]Javascript. Transform synchronous function as asynchronous using callbacks, promises, async/await, generators

我有兩個功能,以前設計為同步運行。

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,generator,Promises進行轉換

這里有一種方法可以將原始代碼重構為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); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM