@onesy/utils
Version:
47 lines (40 loc) • 1.29 kB
JavaScript
import is from './is';
const optionsDefault = {
onError: 'reject'
};
const promisify = function (method) {
let options_ = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return async function () {
const options = { ...optionsDefault,
...options_
};
if (is('promise', method)) return method;
let resolve;
let reject;
const promise = new Promise((resolve_, reject_) => {
resolve = resolve_;
reject = reject_;
});
const resolveMethod = function () {
for (var _len2 = arguments.length, args_ = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
args_[_key2] = arguments[_key2];
}
const error = args_.find(item => is('error', item));
const response = args_.length <= 1 ? args_[0] : args_;
if (error && options.onError === 'reject') return reject(error);
return resolve(response);
};
if (is('function', method)) {
try {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
await method(...args, resolveMethod);
} catch (error) {
return reject(error);
}
} else resolve();
return promise;
};
};
export default promisify;