You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Dart Future转为JavaScript Promise并访问LoginResponse属性

如何在JS中访问Dart类属性并处理Future转Promise

1. 在浏览器控制台访问LoginResponse的属性

Dart编译为JS后,自定义类的实例默认对JS是不透明的,无法直接访问其属性,你可以通过以下两种方式解决:

方法一:将返回值转为JS原生对象

修改login函数,返回一个用JsObject.jsify()包装的普通对象,这样JS可以直接访问属性:

import 'dart:js';
import 'package:dio/dio.dart';

final Dio _dio = Dio();

class LoginResponse extends GenericResponse {
  String? accessToken;
  String? refreshToken;

  LoginResponse(statusCode, this.accessToken, this.refreshToken)
      : super(statusCode);
}

Future<dynamic> login(String phoneNumber, String password, String otp) async {
  Response response = await _dio.post(
    "https://example.com/token/obtain/",
    data: {'phone_number': phoneNumber, 'password': password, 'otp': otp},
    options: Options(validateStatus: (status) => status! < 500),
  );
  // 将LoginResponse的属性转为JS可访问的对象
  return JsObject.jsify({
    'statusCode': response.statusCode,
    'accessToken': response.data['access'],
    'refreshToken': response.data['refresh'],
  });
}

main() => context['loginFromDart'] = login;

之后在浏览器控制台中可以直接访问属性:

loginFromDart('你的手机号', '密码', '验证码')
  .then(res => {
    console.log('accessToken:', res.accessToken);
    console.log('refreshToken:', res.refreshToken);
  });

方法二:给Dart类添加可被JS调用的方法

如果需要保留LoginResponse类结构,可以给类添加获取属性的方法,JS通过调用这些方法获取值:

class LoginResponse extends GenericResponse {
  String? accessToken;
  String? refreshToken;

  LoginResponse(statusCode, this.accessToken, this.refreshToken)
      : super(statusCode);

  // 添加供JS调用的方法
  String? getAccessToken() => accessToken;
  String? getRefreshToken() => refreshToken;
}

在JS中通过调用方法获取属性:

loginFromDart('你的手机号', '密码', '验证码')
  .then(res => {
    console.log('accessToken:', res.getAccessToken());
    console.log('refreshToken:', res.getRefreshToken());
  });

2. Dart Future转JavaScript Promise

不需要额外转换操作——Dart编译器会自动将Future类型转换为JS的Promise。你直接在JS中用Promise的标准语法(.then()/.catch()或async/await)处理即可,示例代码如上。

内容的提问来源于stack exchange,提问作者Vassily

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:16:14