diff options
author | claudiahdz <cghr1990@gmail.com> | 2020-02-06 23:25:33 +0300 |
---|---|---|
committer | isaacs <i@izs.me> | 2020-05-08 04:11:51 +0300 |
commit | 0a45514d8beba749bebbd973ca9750ee0dc13b40 (patch) | |
tree | eec0c989c38fcb7395c9fd565f2a44c79369c59e /node_modules/cacache/lib/util/disposer.js | |
parent | 019e6c41a85edf62727b517e1dfe2d5b9e53ba0e (diff) |
cacache@15.0.0
Diffstat (limited to 'node_modules/cacache/lib/util/disposer.js')
-rw-r--r-- | node_modules/cacache/lib/util/disposer.js | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/node_modules/cacache/lib/util/disposer.js b/node_modules/cacache/lib/util/disposer.js new file mode 100644 index 000000000..8a24ad2f2 --- /dev/null +++ b/node_modules/cacache/lib/util/disposer.js @@ -0,0 +1,30 @@ +'use strict' + +module.exports.disposer = disposer + +function disposer (creatorFn, disposerFn, fn) { + const runDisposer = (resource, result, shouldThrow = false) => { + return disposerFn(resource) + .then( + // disposer resolved, do something with original fn's promise + () => { + if (shouldThrow) { + throw result + } + return result + }, + // Disposer fn failed, crash process + (err) => { + throw err + // Or process.exit? + }) + } + + return creatorFn + .then((resource) => { + // fn(resource) can throw, so wrap in a promise here + return Promise.resolve().then(() => fn(resource)) + .then((result) => runDisposer(resource, result)) + .catch((err) => runDisposer(resource, err, true)) + }) +} |