我有以下代码:
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并拒绝该错误(如果有)。
有更清洁,更安全的选择吗?