Skip to main content
Question

Nested async calls never return

  • September 16, 2024
  • 1 reply
  • 33 views

Ruud_Walraven

I wrote a plugin that is working fine. But when I try to refactor some code into functions the same functionality stops to function. It seems that any code I place into nested async functions never return a value. I also tried the “then” syntax.

Is this a known issue and how do I resolve this?

In the example below async function updateElements() is an async function nested in a function that is already async. Any await figma.... does not return (so it is not just this function). This sin’t really covered in the documentation I read, for example Asynchronous Tasks | Plugin API

async function updateElements() {
    console.log('This line appears in console, indicating the function is executed');
    const colorVariable = await figma.variables.getVariableByIdAsync('VariableID:2:492');
    console.log('Never get\'s here');
}

figma.ui.onmessage = async (msg: { type: string, background: string, color: string }) => {
    if (msg.type === 'update-elements') {
        const colorVariable = await figma.variables.getVariableByIdAsync('VariableID:2:492');//this works 
        console.log(colorVariable); // Contents are displayed in console
        await updateElements();
    }
}
This topic has been closed for replies.

1 reply

Ruud_Walraven

I figured out how to solve the immediate issue:
I initially followed the quickstart guide here: Plugin Quickstart Guide | Plugin API which creates a tsconfig.json:

{
  "compilerOptions": {
    "target": "es6",
    "lib": ["es6"],
    "strict": true,
    "typeRoots": [
      "./node_modules/@types",
      "./node_modules/@figma"
    ]
  }
}

When I change strict so it reads strict: false, then the code works as expected


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings