clientside.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,并且它永远不会等待。
我认为我的实现不正确。我该如何实现?
答案 0 :(得分:0)
通过使用convertNativePromiseToDartFuture
中提供的dart:html_common
API,您可以轻松地将Javascript Promise转换为Dart Future。
一个简单的实现可能看起来像:
JavaScript:
function myCoolFunc () {
return new Promise((resolve, reject) => {
resolve(myLongAwaitedData);
});
}
Dart Interop文件:
@JS()
library coolLib;
import 'package:js/js.dart';
import 'dart:async';
@JS()
external Future<T> myCoolFunc ();
Dart文件:
import 'dart:html_common';
import 'cool_lib.dart';
main() async {
var myVar = await convertNativePromiseToDartFuture(myCoolFunc());
print(myVar);
}
我发现它深深地埋在Dart Sdk的Gitter中。我希望它可以为将来的Angular Dart用户提供帮助。
更新:This API has changed in Dart 2.6 convertNativePromiseToDartFuture
已替换为promiseToFuture