如何在 dart 中等待 JsObject?

问题描述 投票:0回答:1

我是用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
等待来自我的服务器的结果?

javascript flutter dart async-await dart-js-interop
1个回答
0
投票

出现此错误的原因是,在调用 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,]));
© www.soinside.com 2019 - 2024. All rights reserved.