fix(errors): require passing stack traces explicitly in ng2 own code
This commit is contained in:
4
modules/angular2/src/core/application.js
vendored
4
modules/angular2/src/core/application.js
vendored
@ -259,8 +259,8 @@ export function bootstrap(appComponentType: Type,
|
||||
bootstrapProcess.resolve(new ApplicationRef(componentRef, appComponentType, appInjector));
|
||||
},
|
||||
|
||||
(err) => {
|
||||
bootstrapProcess.reject(err)
|
||||
(err, stackTrace) => {
|
||||
bootstrapProcess.reject(err, stackTrace)
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -338,7 +338,7 @@ class _AsyncInjectorStrategy {
|
||||
var deps = this.injector._resolveDependencies(key, binding, true);
|
||||
var depsPromise = PromiseWrapper.all(deps);
|
||||
|
||||
var promise = PromiseWrapper.then(depsPromise, null, (e) => this._errorHandler(key, e))
|
||||
var promise = PromiseWrapper.then(depsPromise, null, (e, s) => this._errorHandler(key, e, s))
|
||||
.then(deps => this._findOrCreate(key, binding, deps))
|
||||
.then(instance => this._cacheInstance(key, instance));
|
||||
|
||||
@ -346,9 +346,9 @@ class _AsyncInjectorStrategy {
|
||||
return promise;
|
||||
}
|
||||
|
||||
_errorHandler(key: Key, e): Promise<any> {
|
||||
_errorHandler(key: Key, e, stack): Promise<any> {
|
||||
if (e instanceof AbstractBindingError) e.addKey(key);
|
||||
return PromiseWrapper.reject(e);
|
||||
return PromiseWrapper.reject(e, stack);
|
||||
}
|
||||
|
||||
_findOrCreate(key: Key, binding: ResolvedBinding, deps: List<any>) {
|
||||
|
@ -6,9 +6,13 @@ export 'dart:async' show Future, Stream, StreamController, StreamSubscription;
|
||||
class PromiseWrapper {
|
||||
static Future resolve(obj) => new Future.value(obj);
|
||||
|
||||
static Future reject(obj) => new Future.error(
|
||||
static Future reject(obj, stackTrace) => new Future.error(
|
||||
obj,
|
||||
obj is Error ? obj.stackTrace : null);
|
||||
stackTrace != null
|
||||
? stackTrace
|
||||
: obj is Error
|
||||
? obj.stackTrace
|
||||
: null);
|
||||
|
||||
static Future<List> all(List<Future> promises) => Future.wait(promises);
|
||||
|
||||
@ -23,7 +27,7 @@ class PromiseWrapper {
|
||||
return promise.catchError(onError);
|
||||
}
|
||||
|
||||
static _Completer completer() => new _Completer(new Completer());
|
||||
static CompleterWrapper completer() => new CompleterWrapper(new Completer());
|
||||
|
||||
// TODO(vic): create a TimerWrapper
|
||||
static Timer setTimeout(fn(), int millis)
|
||||
@ -99,10 +103,10 @@ class EventEmitter extends Stream {
|
||||
}
|
||||
}
|
||||
|
||||
class _Completer {
|
||||
class CompleterWrapper {
|
||||
final Completer c;
|
||||
|
||||
_Completer(this.c);
|
||||
CompleterWrapper(this.c);
|
||||
|
||||
Future get promise => c.future;
|
||||
|
||||
@ -110,11 +114,10 @@ class _Completer {
|
||||
c.complete(v);
|
||||
}
|
||||
|
||||
void reject(v) {
|
||||
var stack = null;
|
||||
if (v is Error) {
|
||||
stack = v.stackTrace;
|
||||
void reject(error, stack) {
|
||||
if (stack == null && error is Error) {
|
||||
stack = error.stackTrace;
|
||||
}
|
||||
c.completeError(v, stack);
|
||||
c.completeError(error, stack);
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ export var Promise = (<any>global).Promise;
|
||||
export class PromiseWrapper {
|
||||
static resolve(obj): Promise<any> { return Promise.resolve(obj); }
|
||||
|
||||
static reject(obj): Promise<any> { return Promise.reject(obj); }
|
||||
static reject(obj, _): Promise<any> { return Promise.reject(obj); }
|
||||
|
||||
// Note: We can't rename this method into `catch`, as this is not a valid
|
||||
// method name in Dart.
|
||||
@ -29,7 +29,7 @@ export class PromiseWrapper {
|
||||
}
|
||||
|
||||
static then<T>(promise: Promise<T>, success: (value: any) => T | Thenable<T>,
|
||||
rejection: (error: any) => T | Thenable<T>): Promise<T> {
|
||||
rejection: (error: any, stack?: any) => T | Thenable<T>): Promise<T> {
|
||||
return promise.then(success, rejection);
|
||||
}
|
||||
|
||||
|
2
modules/angular2/src/mock/xhr_mock.js
vendored
2
modules/angular2/src/mock/xhr_mock.js
vendored
@ -88,7 +88,7 @@ class _PendingRequest {
|
||||
|
||||
complete(response: string) {
|
||||
if (isBlank(response)) {
|
||||
this.completer.reject(`Failed to load ${this.url}`);
|
||||
this.completer.reject(`Failed to load ${this.url}`, null);
|
||||
} else {
|
||||
this.completer.resolve(response);
|
||||
}
|
||||
|
Reference in New Issue
Block a user