Sync and Async
XD plugin APIs support both synchronous and asynchronous code (commonly referred to as sync and async).
Below, we'll talk a little about the difference, and what it means for your XD plugins.
Note: "Sync vs async" is a topic frequently covered in JavaScript tutorials and articles around the web. For a broader introduction, consult your favorite search engine.
Synchronous code
When you write synchronous code, your code is executed line by line.
Here's an example:
Copied to your clipboardconst newElement = new Rectangle();newElement.width = 100;newElement.height = 50;newElement.fill = new Color("Purple");
Asynchronous code
XD plugins also support asynchronous code with both Promises and async/await. Some XD plugin APIs are asynchronous in nature. You can also create your own Promises as you would in any JavaScript environment.
Here's an example using the File API and Promise syntax:
Copied to your clipboardfunction sayHello(selection, documentRoot) {return fs.getFileForSaving().then((file) => {return file.write("Hello, world!");});}
Here's that same example using async/await syntax:
Copied to your clipboardasync function sayHello(selection, documentRoot) {let file = await fs.getFileForSaving();file.write("Hello, world!");}
We recommend async/await syntax over Promises.