首页 > 解决方案 > angular dart js 与客户端中等待的异步/承诺互操作

问题描述

客户端.js

async function callClientAsyncFuncWithResult () {

    let result = await someService.request();
    return result;
}

page.dart

import 'dart:js' as js;

var result = js.context.callMethod('callClientAsyncFuncWithResult'); 

//I want to do something like var result = await js.context.callMethod('callClientAsyncFuncWithResult'); 

在 AngularDart 中,您如何等待客户端 javascript Promise 返回结果,然后再继续在 dart 中执行?现在它只是流过调用,我尝试将 callMethod 的结果设置为 Future 或 Promise 并且它从不等待。

我不认为我的实现是正确的。我怎样才能做到这一点?

标签: dartangular-dartdart-js-interop

解决方案


您可以使用 API 轻松将 Javascript Promise 转换为 Dart Future,该convertNativePromiseToDartFutureAPI 在dart:html_common.

一个简单的实现可能如下所示:

Javascript:

function myCoolFunc () {
  return new Promise((resolve, reject) => {
    resolve(myLongAwaitedData);
  });
}

Dart 互操作文件:

@JS()
library coolLib;

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

@JS()
external Future<T> myCoolFunc ();

飞镖文件:

import 'dart:html_common';
import 'cool_lib.dart';

main() async {
  var myVar = await convertNativePromiseToDartFuture(myCoolFunc());
  print(myVar);
}

我发现它深埋在 Dart Sdk 的 Gitter 中。我希望它可以帮助未来的 Angular Dart 用户。

更新:此 API 在 Dart 2.6 中已更改 convertNativePromiseToDartFuture已替换为promiseToFuture


推荐阅读