2016-04-07 81 views
0

我有一個模塊,我通過require來加載,它返回一個發射器,所以當模塊內的異步函數完成(加載,解析和處理幾個json文件)時,發出一個事件I可以在需要的腳本上使用。如何緩存異步模塊響應

的要求腳本:

LoadJson = require('./loadjsonfiles'); 
... 
LoadJson.loadJsonFiles() 
    .on('data', function(result) { 
     jsonTags = result; 
     checkTags(); 
    }); 

模塊返回:

return emitter; 

當所有的異步加載和工序均由內部完成

emitter.emit('data', jsonTags); 

這是正常使用,與發射器,並返回期望的值,但要求是我應該緩存,所以第二次調用這個模塊只會返回緩存的值,而不是通過加載模塊中的所有異步步驟。

順便說一句,這是從CLI觸發的,所以沒有可用的服務器,而其中一個要求不是使用但核心模塊..

那麼如何緩存響應? 謝謝大家提前

回答

0

您可以使用功能範圍,以存儲/緩存結果:

var getJson = (function(){ 
    var data = null; 

    return function(cb) { 
    if data 
     cb(data); 
    else 
     LoadJson = require('./loadjsonfiles'); 
     LoadJson.loadJsonFiles() 
     .on('data', function(result) { 
      data = result; 
      cb(data); 
     }); 
    } 

}()); 

// loads the json 
getJson(function(data) { 


    // later: uses the cached result 
    getJson(function(data) { 

    }); 

}); 
+0

不錯的辦法,但也許我的錯。該腳本應該用CLI調用,並且我希望數據緩存,所以如果第二次從CLI調用腳本,它將已經緩存了所有進程(加載的json文件不會在兩者之間進行更改) – elQueFaltaba

+0

Ahh okay對不起, 在這種情況下,您必須將結果寫入文件以緩存它。 –