dart:js 调用 promiseToFuture 时出错 - NoSuchMethodError: 尝试调用非函数,例如 null: 'jsPromise.then'



我正在等待一个自定义的全局JavaScript函数:

var promise = js.context.callMethod('performAuthenticationInNewWindow', [uri.toString()]);
print(promise);
var qs = await promiseToFuture(promise);

打印以下内容:

[object Promise]
NoSuchMethodError: tried to call a non-function, such as null: 'jsPromise.then'

我也遇到了同样的错误。给定包含函数promiseToFuture((的包的名称dart:js_util,我也认为该函数应该与用dart:js获得的对象一起使用,但事实并非如此,文档中的示例实际上非常清楚。

javascript Promise对象必须使用package:js@JS()注释获得。示例:

@JS()
library my_lib; //Not avoid the library annotation
import 'dart:js_util';
import 'package:js/js.dart';
@JS()
external performAuthenticationInNewWindow(String uri);
performAuth(uri) async {
var promise = performAuthenticationInNewWindow(uri.toString());
var qs = await promiseToFuture(promise);
print(qs);
}

注意避免错误:

如果使用Javascript进行互操作的函数需要使用dart:js包获得的对象,则声明的类型通常不是Object,而是JsObject或子类。相反,如果必须使用@JS注释获取对象,则声明的类型为Object,如果不存在适当的外部声明(使用@JS注释获得的对象的runtimeType为NativeJavaScriptObject,但Dart Sdk中没有暴露相应的类(。

最新更新