Cesium 1.107+ 自定义类支持 readyPromise

由于cesium 1.107+ 的图元(Primitive) 已经不支持 readyPromise。

但是个人感觉比较好用,于是用了一个插件来实现。

用法:

js 复制代码
// 定义图元并添加,和之前一样
const boxGreen = new BoxPrimitive({
  color: "#ff0000"
})
viewer.scene.primitives.add(boxGreen.primitive)

// 这个是新增的,创建一个 readyPromise 辅助器
const readyHelper = new ReadyPromiseHelper(viewer)
readyHelper.readyPromise(boxGreen.primitive).then(() => {
  console.log("primitive is ready");
})

ReadyPromiseHelper 实现

js 复制代码
export class ReadyPromiseHelper {
  constructor(viewer) {
    this.viewer = viewer;

    this._primitives = new Map();

    viewer.scene.postRender.addEventListener(() => {
      const needDelete = []
      this._primitives.forEach((readyCallback, primitive) => {
        if (primitive.ready) {
          readyCallback()
          needDelete.push(primitive)
        }
      })

      needDelete.forEach(primitive => {
        this._primitives.delete(primitive)
      })
    })
  }

  readyPromise(primitive) {
    let readyCallback;

    const promise = new Promise((resolve, reject) => {
      readyCallback = resolve;
    });
    this._primitives.set(primitive, readyCallback)
    return promise;
  }
}
相关推荐
用户97141718142718 小时前
absolute 元素的包含块(containing block)怎么找
前端·css
青山Coding18 小时前
Cesium应用(四):全球台风气象可视化实现
前端·vue.js·cesium
kyriewen18 小时前
响应式设计:一套代码,手机平板电脑全拿下
前端·css·html
姝然_952718 小时前
Jetpack Compose Shape 基础使用
前端
2501_9110882318 小时前
C++中的代理模式变体
开发语言·c++·算法
cxxcode19 小时前
ArrayBuffer / TypedArray / Blob / File 关系与操作指南
前端
2401_9001515419 小时前
代码覆盖率工具实战
开发语言·c++·算法
叫我一声阿雷吧19 小时前
【JS 实战案例】用 JS 实现页面滚动到指定位置(带动画)
javascript·页面交互·js实战案例·平滑滚动·前端零基础·锚点导航
bu_shuo19 小时前
在命令行中编译cpp文件
开发语言·c++·cpp