toJS 属性

JSPromise<T> toJS

一个JSPromise,它要么使用完成的Future的结果来解析,要么用一个包含其错误的对象来拒绝。

拒绝的对象包含原始错误作为属性error中的JSBoxedDartObject,以及原始堆栈跟踪作为属性stack中的String

实现

JSPromise<T> get toJS {
  return JSPromise<T>((JSFunction resolve, JSFunction reject) {
    this.then((JSAny? value) {
      resolve.callAsFunction(resolve, value);
      return value;
    }, onError: (Object error, StackTrace stackTrace) {
      // TODO(srujzs): Can we do something better here? This is pretty much
      // useless to the user unless they call a Dart callback that consumes
      // this value and unboxes.
      final errorConstructor = globalContext['Error'] as JSFunction;
      final wrapper = errorConstructor.callAsConstructor<JSObject>(
          "Dart exception thrown from converted Future. Use the properties "
                  "'error' to fetch the boxed error and 'stack' to recover "
                  "the stack trace."
              .toJS);
      wrapper['error'] = error.toJSBox;
      wrapper['stack'] = stackTrace.toString().toJS;
      reject.callAsFunction(reject, wrapper);
      return wrapper;
    });
  }.toJS);
}