处理异步回调中错误的最佳方法

时间:2020-09-04 05:00:52

标签: javascript typescript error-handling async-await callback

我有以下代码:

export function request(options): Promise<RequestResultType> {
    return new Promise((resolve, reject) => {
        try {
            // tmp variable to save response chunks
            let rawBody = "";

            const req: ClientRequest = https.request(
                _options,
                (res: IncomingMessage) => {
                    res.on("data", chunk => (rawBody += chunk));

                    res.on("end", () => {
                        try {
                            const resBody = xml && pretty ? prettifyXml(rawBody) : rawBody;
                            const json = xml ? parser.parse(rawBody) : null;
                            resolve({
                                response: res,
                                rawBody,
                                body: resBody,
                                json
                            });
                        } catch (e) {
                            reject(e);
                        }
                    });
                }
            );

            req.on("error", (e: Error) => {
                console.error(`problem with request: ${e.message}`);
                reject(e);
            });

            // Write data to request body
            req.write(body);
            req.end();
        } catch (e) {
            reject(e);
        }
    });
}

为了处理解析响应时可能出现的错误,我必须在try回调周围添加catch res.on('end', () => {,否则错误就会丢失。

如果我理解正确,则在每个回调上我都应该这样做,将其放入try-catch并拒绝该错误(如果有)。

有更清洁,更安全的选择吗?

0 个答案:

没有答案