Javascript 如何调用.after.callMethod在Dart中返回?
我正在尝试使用Dart将.czml文件加载到铯贴图中。javascript代码工作正常,如下所示Javascript 如何调用.after.callMethod在Dart中返回?,javascript,dart,angular-dart,cesium,czml,Javascript,Dart,Angular Dart,Cesium,Czml,我正在尝试使用Dart将.czml文件加载到铯贴图中。javascript代码工作正常,如下所示 var viewer = new Cesium.Viewer('cesiumContainer'); viewer.extend(Cesium.viewerDynamicObjectMixin); viewer.dataSources.removeAll(); var czmlDataSource = new Cesium.CzmlDataSource();
var viewer = new Cesium.Viewer('cesiumContainer');
viewer.extend(Cesium.viewerDynamicObjectMixin);
viewer.dataSources.removeAll();
var czmlDataSource = new Cesium.CzmlDataSource();
czmlDataSource.loadUrl('Vehicle.czml').then(function() {
viewer.dataSources.add(czmlDataSource);
});
这是我正在尝试使用的转换为Dart的代码
void drawCzmlStream() {
_viewer.callMethod('extend', [context['Cesium']['viewerDynamicObjectMixin']]);
_viewer['dataSources'].callMethod('removeAll');
var czmlDataSource = new JsObject(context['Cesium']['CzmlDataSource']);
czmlDataSource.callMethod('loadUrl', ['Vehicle.czml']).then(displaySource(czmlDataSource));
print("finished");
}
void displaySource(dataSource) {
_viewer['dataSources'].callMethod('add', [dataSource]);
print("finished displaying");
}
代码似乎执行正确,czml文件中的数据加载并绘制在地图上,并打印“完成显示”。但是,在print语句之后会出现错误,并且第二个“finished”永远不会显示。我怀疑这与我如何使用电脑有关。然后打电话。我还将AngularDart与调用drawCzmlStream()的CesiumController一起使用
这是控制台显示:
finished displaying
Undefined function drawCzmlStream
STACKTRACE:
#0 DynamicClosureMap.lookupFunction.<anonymous closure> (package:angular/core/parser/parser_dynamic.dart:51:11)
#1 CallMember.eval (package:angular/core/parser/eval_calls.dart:51:25)
#2 DynamicExpression.eval (package:angular/core/parser/dynamic_parser.dart:53:30)
#3 DynamicExpression.eval (package:angular/core/parser/dynamic_parser.dart:54:7)
#4 BoundExpression.call (package:angular/core/parser/syntax.dart:59:36)
#5 NgEvent.initListener.<anonymous closure> (package:angular/directive/ng_events.dart:154:39)
#6 _rootRunUnary (dart:async/zone.dart:734)
#7 _rootRunUnary (dart:async/zone.dart:735)
#8 _rootRunUnary (dart:async/zone.dart:735)
#9 _ZoneDelegate.runUnary (dart:async/zone.dart:462)
#10 _onRunUnary.<anonymous closure> (package:angular/core/zone.dart:114:63)
#11 VmTurnZone._onRunBase (package:angular/core/zone.dart:98:16)
#12 _onRunUnary (package:angular/core/zone.dart:114:17)
#13 _ZoneDelegate.runUnary (dart:async/zone.dart:462)
#14 _CustomizedZone.runUnary (dart:async/zone.dart:667)
#15 _BaseZone.runUnaryGuarded (dart:async/zone.dart:582)
#16 _BaseZone.bindUnaryCallback.<anonymous closure> (dart:async/zone.dart:608)
已完成显示
未定义函数drawCzmlStream
堆栈跟踪:
#0 DynamicClosureMap.lookupFunction。(软件包:angular/core/parser/parser_dynamic.dart:51:11)
#1 CallMember.eval(包:angular/core/parser/eval_calls.dart:51:25)
#2 DynamicExpression.eval(包:angular/core/parser/dynamic_parser.dart:53:30)
#3 DynamicExpression.eval(包:angular/core/parser/dynamic_parser.dart:54:7)
#4 BoundExpression.call(包:angular/core/parser/syntax.dart:59:36)
#5.NgEvent.initListener。(套餐:角度/指令/无人机事件。dart:154:39)
#6_rootrunary(dart:async/zone.dart:734)
#7_rootrunary(dart:async/zone.dart:735)
#8_rootrunary(dart:async/zone.dart:735)
#9_ZoneDelegate.runUnary(dart:async/zone.dart:462)
#10元人民币。(包装:角度/核心/区域。省道:114:63)
#11 VmTurnZone._onRunBase(包:角/芯/区。省道:98:16)
#12 _onrunnary(包:角度/核心/区域。省道:114:17)
#13_ZoneDelegate.runUnary(dart:async/zone.dart:462)
#14_CustomizedZone.runUnary(dart:async/zone.dart:667)
#15_BaseZone.runUnaryGuarded(dart:async/zone.dart:582)
#16_BaseZone.bindUnaryCallback。(省道:异步/分区。省道:608)
谢谢你,本杰明,你的建议是正确的。这是最后的省道代码
void drawCzmlStream() {
_viewer.callMethod('extend', [context['Cesium']['viewerDynamicObjectMixin']]);
_viewer['dataSources'].callMethod('removeAll');
var czmlDataSource = new JsObject(context['Cesium']['CzmlDataSource']);
var loaded = czmlDataSource.callMethod('loadUrl', ['../czml/Vehicle.czml']);
loaded.callMethod('then', [(_) => displaySource(czmlDataSource)]);
print("finished");
}
void displaySource(dataSource) {
_viewer['dataSources'].callMethod('add', [dataSource]);
print("finished displaying");
}
callMethod
是否也会返回一个JsObject,并且您必须调用。然后通过另一个callMethod
调用调用,这是正确的@BenjaminGruenbaum你应该写下来作为答案。