我是用JavaScript连接微软SignalR服务器,因为我在Flutter Web中没有找到任何支持signalR客户端的dart包。我在
https://cdnjs.cloudflare.com/ajax/libs/microsoft-signalr/8.0.7/signalr.min.js"
标签中包含了 head
。然后我使用初始化连接
js.JsObject connection
connection= js.JsObject(js.context['signalR']['HubConnectionBuilder'])
.callMethod('withUrl', [
url,
]).callMethod('build');
final completer = Completer<void>();
connection.callMethod('start').callMethod('then', [
() {
completer.complete();
},
(error) {
completer.completeError(error);
}
]);
错误发生在以下代码行
final message = JSPromise<JSAny>(await connection.callMethod(
'invoke', [
'Send',
message,"
]));
错误:
TypeError:“JsObject”实例:“JsObject”类型不是“JavaScriptFunction”类型的子类型
JSPromise
目前未等待我的服务器的结果。我如何确保 JSPromise
等待来自我的服务器的结果?
出现此错误的原因是,在调用 JsObject 上的方法时,Dart 中 JsObject 不会自动转换为 JavaScriptFunction。您需要使用 js_util.promiseToFuture 来正确等待 Dart 中的 JavaScript Promise。以下是修改代码的方法:
import 'dart:js_util' as js_util;
final message = await js_util.promiseToFuture(connection.callMethod('invoke', ['Send',
message,]));