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;
  }
}
相关推荐
井柏然20 小时前
前端工程化—实战npm包深入理解 external 及实例唯一性
前端·javascript·前端工程化
爱吃小胖橘21 小时前
Lua语法(2)
开发语言·unity·lua
_Power_Y21 小时前
SSM面试题学习
java·开发语言·学习
SccTsAxR21 小时前
[初学C语言]关于scanf和printf函数
c语言·开发语言·经验分享·笔记·其他
IT_陈寒21 小时前
Redis 高性能缓存设计:7个核心优化策略让你的QPS提升300%
前端·人工智能·后端
aklry21 小时前
elpis之动态组件机制
javascript·vue.js·架构
井柏然21 小时前
从 npm 包实战深入理解 external 及实例唯一性
前端·javascript·前端工程化
害恶细君21 小时前
【超详细】使用conda配置python的开发环境
开发语言·python·jupyter·pycharm·conda·ipython
羊锦磊1 天前
[ vue 前端框架 ] 基本用法和vue.cli脚手架搭建
前端·vue.js·前端框架
brzhang1 天前
高通把Arduino买了,你的“小破板”要变“AI核弹”了?
前端·后端·架构