dart - 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 并且它从不等待。
我不认为我的实现是正确的。我怎样才能做到这一点?
解决方案
您可以使用 API 轻松将 Javascript Promise 转换为 Dart Future,该convertNativePromiseToDartFuture
API 在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
推荐阅读
- flutter - 在 TextAlign.center 或 TextAlign.right 中颤动 textField 光标
- c++ - 虚函数,什么时候用?
- html - 为什么使用 css 的 zindex 值较低的元素会出现在 z-index 较高的元素之上?
- magento - 停止 Braintree 付款方式的自动发票生成
- javascript - 使用正则表达式 js 匹配最后一个最佳单词
- c# - System.TypeLoadException 使用 Google.Apis.Auth.Mvc FlowMetadata
- multithreading - 我需要在 PowerShell 中调用“Remove-Job”吗?
- python - 如果 Dask 系列包含不可散列的类型,如何将其转换为字符串类型?
- angular - “ng build --configuration= staging or production or demo”命令在构建后抛出错误
- javascript - Slick Carousel/Slider - 将导航添加为滚动条