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;
  }
}
相关推荐
还有你Y2 小时前
Shell 脚本语法
前端·语法·sh
踩着两条虫4 小时前
如何评价VTJ.PRO?
前端·架构·ai编程
2401_873479405 小时前
如何利用IP查询定位识别电商刷单?4个关键指标+工具配置方案
开发语言·tcp/ip·php
Mh5 小时前
鼠标跟随倾斜动效
前端·css·vue.js
我爱cope5 小时前
【从0开始学设计模式-10| 装饰模式】
java·开发语言·设计模式
菜鸟学Python5 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
小码哥_常6 小时前
Kotlin类型魔法:Any、Unit、Nothing 深度探秘
前端
浪浪小洋6 小时前
c++ qt课设定制
开发语言·c++
charlie1145141917 小时前
嵌入式C++工程实践第16篇:第四次重构 —— LED模板,从通用GPIO到专用抽象
c语言·开发语言·c++·驱动开发·嵌入式硬件·重构
故事和你917 小时前
洛谷-数据结构1-4-图的基本应用1
开发语言·数据结构·算法·深度优先·动态规划·图论