Flutter Web调用JS异步函数返回[object Promise]的原因咨询
问题原因及解决方法
原因
JS的async函数本质上会返回一个Promise对象,而你用dart:js的js.context.callMethod调用该函数时,得到的是JS层面的Promise实例,并非Dart的Future类型。Dart的await关键字只能处理Dart自身的Future,无法直接解析JS的Promise,所以直接await后拿到的还是原始的JS Promise对象,打印就会显示[object Promise]。
解决方法
你需要把JS Promise转换成Dart能识别的Future,可以用package:js_util里的promiseToFuture工具方法:
- 先导入依赖包:
import 'package:js_util/js_util.dart';
- 修改调用代码:
// 先调用JS函数拿到Promise final jsPromise = js.context.callMethod('doSomething', ['someValue']); // 转换为Dart Future并await final result = await promiseToFuture(jsPromise);
另外注意你原Dart代码里有个语法错误:['someValue']));多了一个右括号,改成['someValue']);即可。
内容的提问来源于stack exchange,提问作者BlackBeard
相关产品推荐
相关产品推荐

