gpt4 book ai didi

fluid-framework - 我应该为 FluidFramework 使用哪种嵌套数据结构

转载 作者:行者123 更新时间:2023-12-04 14:11:04 24 4
gpt4 key购买 nike

如果我想使用嵌套数据结构,选择哪种数据结构更好。

例如。

enter image description here

对于eg1情况,似乎无法在'hasInitialized()'中加载子DDS数据。

对于eg2来说,好像有点复杂

有谁能举出这个案例的例子吗?

最佳答案

DataObject 包含一个或多个 DDS 的集合,嵌套它们允许您创建组织结构。 DDS 本身也可以在初始化步骤中嵌套和检索。

有几种方法可以解决 eg1,我在下面重点介绍了两种。

对于eg2,你是对的,它有点复杂,而且通常不是我们目前正在插入的模式。 repo 协议(protocol)中有一些示例,但您会发现它们使用的开发人员模型与 HelloWorld 略有不同。 SimpleComponentEmbedPond如果您想探索 DataObject 嵌入,这是最好的起点。

使用root SharedDirectory进行嵌套

root SharedDirectory 允许您创建子目录。这是管理嵌套 map 集合的好方法。使用子目录而不是将 SharedMap 放在根目录上可确保创建和设置作为一个原子操作而不是两个操作(一个用于创建,一个用于设置)发生。

目前的缺点是你必须监听根目录上的事件,看看它是否对应于你的子目录。正在使用 Issue #1403 跟踪子目录上的事件

protected async initializingFirstTime() {
const subDirectory = this.root.createSubDirectory("sub-dir");
subDirectory.createSubDirectory("sub-sub-dir");
}

protected async hasInitialized() {
const subDirectory = this.root.getSubDirectory("sub-dir");
const ssDir = subDirectory.getSubDirectory("sub-sub-dir");

this.root.on("valueChanged", (changed: IDirectoryValueChanged) => {
if (changed.path === ssDir.absolutePath) {
const newValue = ssDir.get(changed.key);
console.log(newValue);
}
});

// An easy way to trigger/test the above handler without user interaction
setTimeout(() => {
ssDir.set("foo", "bar2");
}, 10000); // 10 seconds
}

使用嵌套 DDS

您还可以存储嵌套的 DDS。您需要记住的是,您正在存储/检索 DDS 的句柄。在下面的示例中,我们使用键/值创建 map1。我们是 map2 中的字符串 map1,它存储在 root DDS 上。然后,我们将从 map1 中获取值,方法是首先获取 map2,然后是 map1,然后是值。

protected async initializingFirstTime() {
const map1 = SharedMap.create(this.runtime);
map1.set("foo", "bar");

const map2 = SharedMap.create(this.runtime);
map2.set("map1", map1.handle);

this.root.set("map2", map2.handle);
}

protected async hasInitialized() {
const map2 = await this.root.get<IFluidHandle<SharedMap>>("map2").get();
const map1 = await map2.get<IFluidHandle<SharedMap>>("map1").get();

console.log(map1.get("foo"));
}

关于fluid-framework - 我应该为 FluidFramework 使用哪种嵌套数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64331516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com