我寻求您的帮助!
我需要在铯中的ITRF和GCRF之间执行参考帧转换。
我想在主线程声明的专用工作程序脚本中执行此操作。
通过以下操作,我已经能够在主脚本中执行此转换:
let loadDataPromise = Cesium.Transforms.preloadIcrfFixed(timeInterval);
loadDataPromise.then(function(){
console.log("Data is Loaded");
//Do the rest in here
})
.. so,我知道我正在以这种方式做正确的事(我认为!)
现在,对于要在worker脚本中执行的相同操作,我已经导入了使用Webpack进行构建所需的特定Cesium模块。我想最小化整个应用程序中对铯资源的使用。我正在工作脚本中执行其他转换,没有任何问题,但是由于上述代码的要求以及我对Promises的了解还不够,ITRF / GCRF的转换让我头疼。
将以上代码放在工作脚本中时,它将永远无法在控制台中打印消息“数据已加载”。看来我的功能永远无法运行,并且挂起了控制台。
我应该遵循什么方法来实现上述承诺,从而在工作人员中正确实现?恐怕我的问题更多是与Javascript知识有关,而不是Cesium。
我调用工作程序的主脚本:
console.log('Main START');
w = new Worker('worker.js');
w.postMessage(0)
我的工人脚本没有实现承诺
import JulianDate from 'cesium/core/JulianDate.js';
import TimeInterval from 'cesium/core/TimeInterval.js';
import Transforms from 'cesium/core/Transforms.js';
var timestamp = new JulianDate.now();
var timeJDstart = new JulianDate();
var timeJDstop = new JulianDate();
JulianDate.addSeconds(timestamp,-1,timeJDstart);
JulianDate.addSeconds(timestamp,1,timeJDstop);
let now = new Date();
var timeInterval = new TimeInterval({
start : JulianDate.fromDate(now),stop : JulianDate.fromDate(new Date(now.getTime()+3*1000)),isStartIncluded : true,isStopIncluded : true
});
console.log("Work started")
let promiser = new Transforms.preloadIcrfFixed(timeInterval);
console.log(promiser);
// The code below never fulfills?
promiser.then(function(){
onmessage = function(e){
console.log("Promise Resolved,Worker ready to continue");
}
});
任何帮助将不胜感激!谢谢! 曼尼