提交 9a6837f1 编写于 作者: R Rob Lourens

Fix unhandled cancel warnings from search process

上级 c9356544
......@@ -4,9 +4,10 @@
*--------------------------------------------------------------------------------------------*/
'use strict';
import { TPromise } from 'vs/base/common/winjs.base';
import { ISplice } from 'vs/base/common/sequence';
import { CancellationToken } from 'vs/base/common/cancellation';
import { canceled } from 'vs/base/common/errors';
import { ISplice } from 'vs/base/common/sequence';
import { TPromise } from 'vs/base/common/winjs.base';
/**
* Returns the last element of an array.
......@@ -267,7 +268,7 @@ export function topAsync<T>(array: T[], compare: (a: T, b: T) => number, n: numb
await new Promise(resolve => setTimeout(resolve)); // nextTick() would starve I/O.
}
if (token && token.isCancellationRequested) {
throw new Error('canceled');
throw canceled();
}
topStep(array, compare, result, i, m);
}
......
......@@ -11,7 +11,7 @@ import { join, sep } from 'path';
import * as arrays from 'vs/base/common/arrays';
import { CancelablePromise, createCancelablePromise, toWinJsPromise } from 'vs/base/common/async';
import { CancellationToken } from 'vs/base/common/cancellation';
import { canceled } from 'vs/base/common/errors';
import { canceled, isPromiseCanceledError } from 'vs/base/common/errors';
import { Emitter, Event } from 'vs/base/common/event';
import * as objects from 'vs/base/common/objects';
import * as strings from 'vs/base/common/strings';
......@@ -47,9 +47,16 @@ export class SearchService implements IRawSearchService {
const emitter = new Emitter<ISerializedSearchProgressItem | ISerializedSearchComplete>({
onFirstListenerDidAdd: () => {
promise = createCancelablePromise(token => {
return this.doFileSearch(FileSearchEngine, config, p => emitter.fire(p), token, batchSize)
.then(c => emitter.fire(c), err => emitter.fire({ type: 'error', error: { message: err.message, stack: err.stack } }));
return this.doFileSearch(FileSearchEngine, config, p => emitter.fire(p), token, batchSize);
});
promise.then(
c => emitter.fire(c),
err => {
if (!isPromiseCanceledError(err)) {
emitter.fire({ type: 'error', error: { message: err.message, stack: err.stack } });
}
});
},
onLastListenerRemove: () => {
promise.cancel();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册