Skip to content

Commit b9e0bb7

Browse files
committed
Response stream need error handling. Fixes microsoft#2
1 parent 8364e2f commit b9e0bb7

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

src/main.ts

+15-2
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ export function xhr(options: XHROptions): Promise<XHRResponse> {
6060
let res = result.res;
6161
let readable: NodeJS.ReadableStream = res;
6262
let encoding = res.headers && res.headers['content-encoding'];
63+
let isCompleted = false;
6364
if (encoding === 'gzip') {
6465
let gunzip = zlib.createGunzip();
6566
res.pipe(gunzip);
@@ -72,6 +73,10 @@ export function xhr(options: XHROptions): Promise<XHRResponse> {
7273
let data: any = [];
7374
readable.on('data', c => data.push(c));
7475
readable.on('end', () => {
76+
if (isCompleted) {
77+
return;
78+
}
79+
isCompleted = true;
7580
if (options.followRedirects > 0 && (res.statusCode >= 300 && res.statusCode <= 303 || res.statusCode === 307)) {
7681
let location = res.headers['location'];
7782
if (location) {
@@ -95,13 +100,21 @@ export function xhr(options: XHROptions): Promise<XHRResponse> {
95100
e(response);
96101
}
97102
});
103+
readable.on('error', (err) => {
104+
let response: XHRResponse = {
105+
responseText: localize('error', 'Unable to access {0}. Error: {1}', options.url, err.message),
106+
status: 500
107+
};
108+
isCompleted = true;
109+
e(response);
110+
});
98111
}), err => {
99112
let message: string;
100113

101114
if (agent) {
102-
message = localize('error.cannot.connect.proxy', 'Unable to to connect to {0} through a proxy . Error: {1}', options.url, err.message);
115+
message = localize('error.cannot.connect.proxy', 'Unable to connect to {0} through a proxy . Error: {1}', options.url, err.message);
103116
} else {
104-
message = localize('error.cannot.connect', 'Unable to to connect to {0}. Error: {1}', options.url, err.message);
117+
message = localize('error.cannot.connect', 'Unable to connect to {0}. Error: {1}', options.url, err.message);
105118
}
106119

107120
return Promise.reject<XHRResponse>({

0 commit comments

Comments
 (0)