Currently stuck trying to get react to get an object rather than return a promise,
Basically I have two lists of presets, user and default. I’m using a function to combine the objects and then pass it onto a .map() to render a dropdown.
Current code is
const defaultPresetsLoader = () => {
const defaultPresets = require("../data/defaultPresets.json");
return defaultPresets
};
const getPresets = async () => {
const defaultPresets = defaultPresetsLoader();
let dataFolder = await fs.getDataFolder();
let returnFile = await dataFolder.getEntry("userPresets.json");
let file = await returnFile.read();
let userPresets = await JSON.parse(file);
const presetsObject = {
...defaultPresets,
...userPresets,
};
console.log(presetsObject) // This logs the object as expected
return presetsObject
}
const presets = getPresets();
console.log(presets) // This returns a promise
If I console.log inside the function getPresets(), it returns the object as expected. If I console.log from outside, it returns the promise.
If I swap
const presets = getPresets();
to
const presets = defaultPresetsLoader();
Then the dropdown updates with the default options as it get’s the object from that function as expected.
The dropdown it’s updating is
<sp-picker id="presetPicker" size="s" style={{ flexGrow: 1 }}>
<sp-menu slot="options" onClick={handlePresetChange}>
{Object.entries(presets).map(([name, data]) => (
<sp-menu-item
selected={preset.name === data.name ? true : null}
id={data.id}
key={data.id}
value={name}
>
{data.name}
</sp-menu-item>
))}
</sp-menu>
</sp-picker>
Not sure what’s wrong here although I imagine it’s something to do with async/await