javascript - 如何从 Flutter 调用异步 JS 函数并获取结果?

标签 javascript flutter promise future

我需要从 JS 获取 Flutter Web 上 Algolia 的搜索结果?

这是在index.html中:

<script>
   const client = algoliasearch("4HURXXXXX", "xxxxxb8fxxxx");
   async function asyncTest(indexx, text, hitCallback, errorCallback) {
     // Get the 
     const index = client.initIndex(indexx);
      
     const res = await index.search();

     return res;
      
   }
</script>

flutter :

import 'dart:js' as js;

    js.context.callMethod('asyncTest', [
      'stock_items',
      searchValue,
    ]);

如何获得 Javsdript promise 作为 Dart Future?

最佳答案

您可以使用 dart:js 库将 JavaScript Promise 转换为 Dart Future。

import 'dart:async';
import 'dart:js' as js;

Future<dynamic> searchAlgolia(String index, String text) {
  final completer = Completer<dynamic>();

  js.context.callMethod('asyncTest', [
    index,
    text,
    (result) => completer.complete(result),
    (error) => completer.completeError(error),
  ]);

  return completer.future;
}

在这段代码中,我创建了一个 Completer 将 JavaScript Promise 转换为 Dart Future。您需要将索引和文本参数传递给 JavaScript 中的 asyncTest 函数。您还可以传递两个回调来处理成功和错误情况。当 JavaScript Promise 解析时,完成器将完成结果。如果 Promise 被拒绝,则完成器将完成并出现错误。最后返回完成者的 future 属性。

关于javascript - 如何从 Flutter 调用异步 JS 函数并获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76838915/

相关文章:

许多 Bloc 的 flutter_bloc 共享状态

javascript - 设置 bluebird.js promise 解析的最小延迟

javascript - 带有 MVC 3 和 ViewModel 的 Backbone.js

容器内的 Flutter 文本

javascript - 无法获取表单面板的 x 和 y 坐标并在加载时从 cookie 中设置它们

flutter - 如何从 ListView 中删除自动 SafeArea?

javascript - Bluebird promises - 嵌套与拒绝模式

javascript - 使用 async/await Promise NodeJS 获取交易哈希

javascript - 为什么我的部分没有被发现?

javascript - 这个正则表达式的含义