import { tryit } from 'ut2';
/**
* 检查函数执行结果。
*
* 如果函数执行异常或返回下列结果,则返回 `false` ,否则返回 `true`。
* 1. `Promise.reject()`
* 2. `Promise.resolve(false)`
* 3. `false`
*
* @alias module:Other.checkResult
* @since 5.5.0
* @param {Function} [fn=()=>true] 处理函数,默认 `()=>true`。
* @param {...*} [args] 展开参数,`fn` 执行参数。
* @returns {Promise<boolean>}
* @example
* await checkResult(()=>throw new Error()); // false
* await checkResult(()=>Promise.reject()); // false
* await checkResult(()=>Promise.resolve(false)); // false
* await checkResult(async ()=>false); // false
* await checkResult(()=>false); // false
*
* await checkResult(undefined); // true
* await checkResult(()=>true); // true
* await checkResult(()=>Promise.resolve()); // true
* await checkResult(async ()=>true); // true
* await checkResult(()=>null); // true
* await checkResult(()=>undefined); // true
* await checkResult(()=>'foo'); // true
*
* // 传入参数
* await checkResult((...args)=>args.length > 1); // false
* await checkResult((...args)=>args.length > 1, 'a', 'b'); // true
*/
const checkResult = async (fn = () => true, ...args) => {
const [err, ret] = await tryit(fn)(...args);
return !err && ret !== false;
};
export default checkResult;