{"dist":{"shasum":"df9dd5132029676224bbd3c090e0c5952abf4afd","tarball":"https://registry.npmjs.org/memolite/-/memolite-0.1.0.tgz","integrity":"sha512-gycqGEpHKqX7Zl6vViSnGmSaryjJhaf8ZGqB00BkKpWXLh1Rq2FQ3aVwXZnxJ1feJeNXmKZ6HapnFtmuKJAIVQ==","signatures":[{"sig":"MEQCIENXvA3WrU4C409u+Dn8lmzZ/itn1CfANX0UUu7YI8TUAiAER1l/3s+Eg35DSaB4i3PLAMUxErWbW/qNSahDAuXLKQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"name":"memolite","_from":".","author":{"name":"Mathias Buus Madsen","email":"mathiasbuus@gmail.com"},"readme":"# memolite\n\nExtremely simple memoizing for async functions.\nIt is available through npm\n\n\tnpm install memolite\n\n## Usage\n\nmemolite memoizes async functions on the form `function(callback) { ... }`\n\n``` js\nvar memolite = require('memolite');\nvar fs = require('fs');\n\nvar random = memolite(function(callback) {\n\tconsole.log('I am only called once');\n\tsetTimeout(function() {\n\t\tcallback(Math.random());\n\t}, 1000);\n});\n\nrandom(function(num) {\n\tconsole.log(num); // prints a random number after 1s\n});\n\nrandom(function(num) {\n\tconsole.log(num); // prints the same number as above\n});\n```\n\nIf you wanted to do a file reader that only read files once and remembered the result you would do\n\n``` js\nvar memolite = require('memolite');\nvar fs = require('fs');\n\nvar fileReader = function(filename) {\n\treturn memolite(function(callback) {\n\t\tconsole.log('reading '+filename);\n\t\tfs.readFile(filename, callback);\n\t});\n};\n\nvar readReadme = fileReader('README.md');\n\nreadReadme(function(err, data) { // prints 'reading README.md'\n\tconsole.log('README is '+data);\n});\n\nreadReadme(function(err, data) { // memolite will wait for the read to finish and return the data\n\tconsole.log('README is '+data);\n});\n```\n\nIf an error is passed to the callback then memolite will not remember the result\n\n``` js\nvar run = memolite(function(callback) {\n\tconsole.log('running');\n\tcallback(new Error('bad things'));\n});\n\nrun(function(err) { // 'running' is printed\n\tconsole.log(err);\n});\n\nrun(function(err) { // 'running' is printed again\n\tconsole.log(err);\n});\n```\n\nA great usecase for memolite is doing lazy operations.\n\n``` js\nvar makeFolder = memolite(function(callback) {\n\tfs.mkdir('/tmp/my-folder', callback);\n});\n\nvar writeFile = function(filename, data, callback) {\n\tmakeFolder(function(err) {\n\t\tif (err) return callback(err);\n\t\tfs.writeFile('/tmp/my-folder/'+filename, data, callback);\n\t});\n};\n```\n\nCalling `writeFile` multiple times would result in `fs.mkdir(...)` being called only once (if there are no errors).\n\n## License\n\nMIT","_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"keywords":["memo","memoize","async","simple"],"repository":{"url":"git://github.com/mafintosh/memolite","type":"git"},"_npmVersion":"1.2.11","description":"extremly simple memoizing for async functions","maintainers":[{"name":"mafintosh","email":"mathiasbuus@gmail.com"}],"readmeFilename":"README.md","_id":"memolite@0.1.0","version":"0.1.0"}