box.js

import { __awaiter, __generator } from "tslib";
/**
 * 异步函数无需 try-catch,让异步编码开发体验更佳。
 * 1. 减少 try-catch 引入的嵌套
 * 2. 防止出现大而全的 try-catch
 * 3. 自动推导类型,避免 try-catch 丢失类型
 * 4. 最重要的是逼迫开发者将异常放到第一位去考虑,避免忘记 try-catch 导致 Unhandled Promise rejection
 *
 * @param promise Promise<T> Promise
 * @returns 返回 tuple,失败则第一项是 `error`,成功第一项为 `undefined`,第二项是返回值
 *
 * @example
 *
 * const [error, resp] = await box(ajax.get(url));
 * if (error || !resp.success) {
 *    const err = error || resp;
 *    console.log('error');
 *    throw err;
 * }
 * return resp;
 */
function box(promise) {
    return __awaiter(this, void 0, void 0, function () {
        var _a, error_1;
        return __generator(this, function (_b) {
            switch (_b.label) {
                case 0:
                    _b.trys.push([0, 2, , 3]);
                    _a = [undefined];
                    return [4 /*yield*/, promise];
                case 1: return [2 /*return*/, _a.concat([_b.sent()])];
                case 2:
                    error_1 = _b.sent();
                    return [2 /*return*/, [error_1, undefined]];
                case 3: return [2 /*return*/];
            }
        });
    });
}
export default box;
//# sourceMappingURL=box.js.map