Simplify the code slightly (use result.value instead of done promise result)
authorNick Downing <downing.nick@gmail.com>
Mon, 8 Oct 2018 23:38:23 +0000 (10:38 +1100)
committerNick Downing <downing.nick@gmail.com>
Mon, 8 Oct 2018 23:38:23 +0000 (10:38 +1100)
build_cache.js

index 7aab709..15918ff 100644 (file)
@@ -13,18 +13,12 @@ BuildCache.prototype.get = async function(key, build_func) {
   let result = this.map.get(key)
   if (result === undefined) {
     result = {deps: [key], time: Date.now()}
-    result.done = (
-      async () => {
-        await build_func(result)
-        return result.value
-      }
-    )()
+    result.done = build_func(result)
     this.map.set(key, result)
-    let value = await result.done
+    await result.done
     delete result.done
-    return value
   }
-  if (result.done === undefined) {
+  else if (result.done === undefined) {
     result.done = (
       async () => {
         for (let i = 0; i < result.deps.length; ++i) {
@@ -36,14 +30,14 @@ BuildCache.prototype.get = async function(key, build_func) {
             break
           }
         }
-        return result.value
       }
     )()
-    let value = await result.done
+    await result.done
     delete result.done
-    return result.value
   }
-  return /*await*/ result.done
+  else
+    await result.done
+  return result.value
 }
 
 module.exports = BuildCache