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;
  }
}
相关推荐
前端小巷子5 分钟前
Webpack 5模块联邦
前端·javascript·面试
玲小珑8 分钟前
Next.js 教程系列(十九)图像优化:next/image 与高级技巧
前端·next.js
晓得迷路了9 分钟前
栗子前端技术周刊第 91 期 - 新版 React Compiler 文档、2025 HTML 状态调查、Bun v1.2.19...
前端·javascript·react.js
江城开朗的豌豆15 分钟前
Vue和React中的key:为什么列表渲染必须加这玩意儿?
前端·vue.js·面试
江城开朗的豌豆20 分钟前
前端路由傻傻分不清?route和router的区别,看完这篇别再搞混了!
前端·javascript·vue.js
pengzhuofan23 分钟前
Web开发系列-第0章 Web介绍
前端
枫叶丹430 分钟前
【Qt开发】信号与槽(二)-> 信号和槽的使用
开发语言·qt
小鱼人爱编程32 分钟前
Java基石--反射让你直捣黄龙
前端·spring boot·后端
Vertira1 小时前
python 阿里云 安装 dashscope的简介、安装
开发语言·python
JosieBook2 小时前
【web应用】如何进行前后端调试Debug? + 前端JavaScript调试Debug?
前端·chrome·debug