From f0c8d8c4d3e032ec94511c6029033a319d8eab3b Mon Sep 17 00:00:00 2001 From: Perminder Date: Sat, 7 Jun 2025 03:13:52 +0530 Subject: [PATCH 1/4] some fixes Co-authored-by: Mamatha1718 --- .../en/16_Parallel_Loading_Promise/code.js | 46 ++++++++++++++++++ .../description.mdx | 17 +++++++ .../16_Async_Await_PromiseAll-thumbnail.png | Bin 0 -> 34207 bytes 3 files changed, 63 insertions(+) create mode 100644 src/content/examples/en/16_Parallel_Loading_Promise/code.js create mode 100644 src/content/examples/en/16_Parallel_Loading_Promise/description.mdx create mode 100644 src/content/examples/images/featured/16_Async_Await_PromiseAll-thumbnail.png diff --git a/src/content/examples/en/16_Parallel_Loading_Promise/code.js b/src/content/examples/en/16_Parallel_Loading_Promise/code.js new file mode 100644 index 0000000000..037777fa8c --- /dev/null +++ b/src/content/examples/en/16_Parallel_Loading_Promise/code.js @@ -0,0 +1,46 @@ +// PromiseAllExample.js + +// Declare variables to hold the images we'll load +let img1, img2, img3; + +async function setup() { + // Add screen reader-friendly text description + textOutput(); + + // Create a canvas where the images will be drawn + createCanvas(600, 400); + + // Set background color to gray + background(220); + + // Configure text appearance + textAlign(CENTER, CENTER); + textSize(18); + + // Use async/await with Promise.all to load all three images at once + // This waits untill ALL images are loaded before continuing + [img1, img2, img3] = await Promise.all([ + loadImageAsync('https://picsum.photos/100/100?random=1'), // Replace the image links with user wanted images. + loadImageAsync('https://picsum.photos/100/100?random=2'), + loadImageAsync('https://picsum.photos/100/100?random=3') + ]); + + // Once all images are ready, draw them on the canvas + image(img1, 100, 150); // Draw first image at x=100 + image(img2, 250, 150); // Second image at x=250 + image(img3, 400, 150); // Third image at x=400 + + // Display a message showing that everything is loaded + fill(0); // Set text color to black + text("All images loaded!", width / 2, 50); +} + +// Helper function to load images using a Promise +// Makes loadImage compatible with async/await style +function loadImageAsync(url) { + return new Promise((resolve, reject) => { + // Try to load the image from the given URL. + //If successful, resolve the promise with the image. If it fails, reject with the error. + loadImage(url, img => resolve(img), err => reject(err)); + }); +} \ No newline at end of file diff --git a/src/content/examples/en/16_Parallel_Loading_Promise/description.mdx b/src/content/examples/en/16_Parallel_Loading_Promise/description.mdx new file mode 100644 index 0000000000..906af2c6bc --- /dev/null +++ b/src/content/examples/en/16_Parallel_Loading_Promise/description.mdx @@ -0,0 +1,17 @@ +--- +featuredImage: "../../../images/featured/16_Async_Await_PromiseAll-thumbnail.png" +featuredImageAlt: Three random images loaded and displayed on a canvas after using async/await and Promise.all. +title: Async Await with Promise.all +oneLineDescription: Load multiple resources asynchronously before drawing. +--- + +This example demonstrates how to use + async/await +together with +Promise.all() + +Three random images are fetched asynchronously from the internet. +After all images finish loading, they are drawn together on the canvas. +Using +loadImage() +wrapped inside a promise allows better control over loading multiple resources efficiently. \ No newline at end of file diff --git a/src/content/examples/images/featured/16_Async_Await_PromiseAll-thumbnail.png b/src/content/examples/images/featured/16_Async_Await_PromiseAll-thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..3c568dd7493fcc8befb0d7708615e3b4a26a42c1 GIT binary patch literal 34207 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%0AiCFpAT8(a|SxkNi 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 xT^~$}Bx5jaC*G994}KqzzyBE7=?Kl Date: Sat, 7 Jun 2025 03:46:00 +0530 Subject: [PATCH 2/4] some-directory-fixes --- .../{ => 00_Async_Image_Loader}/code.js | 0 .../{ => 00_Async_Image_Loader}/description.mdx | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/content/examples/en/16_Parallel_Loading_Promise/{ => 00_Async_Image_Loader}/code.js (100%) rename src/content/examples/en/16_Parallel_Loading_Promise/{ => 00_Async_Image_Loader}/description.mdx (100%) diff --git a/src/content/examples/en/16_Parallel_Loading_Promise/code.js b/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js similarity index 100% rename from src/content/examples/en/16_Parallel_Loading_Promise/code.js rename to src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js diff --git a/src/content/examples/en/16_Parallel_Loading_Promise/description.mdx b/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/description.mdx similarity index 100% rename from src/content/examples/en/16_Parallel_Loading_Promise/description.mdx rename to src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/description.mdx From 76bf50eacf8a2a9fce8f6fa4a61951d86b56f133 Mon Sep 17 00:00:00 2001 From: Perminder Singh <127239756+perminder-17@users.noreply.github.com> Date: Sat, 7 Jun 2025 03:48:33 +0530 Subject: [PATCH 3/4] fixed misspelling --- .../16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js b/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js index 037777fa8c..44e7f91b65 100644 --- a/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js +++ b/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js @@ -18,7 +18,7 @@ async function setup() { textSize(18); // Use async/await with Promise.all to load all three images at once - // This waits untill ALL images are loaded before continuing + // This waits until ALL images are loaded before continuing [img1, img2, img3] = await Promise.all([ loadImageAsync('https://picsum.photos/100/100?random=1'), // Replace the image links with user wanted images. loadImageAsync('https://picsum.photos/100/100?random=2'), @@ -43,4 +43,4 @@ function loadImageAsync(url) { //If successful, resolve the promise with the image. If it fails, reject with the error. loadImage(url, img => resolve(img), err => reject(err)); }); -} \ No newline at end of file +} From 766fce0779fd424b05d6a557353fd650d583d8bd Mon Sep 17 00:00:00 2001 From: Perminder Singh <127239756+perminder-17@users.noreply.github.com> Date: Sat, 7 Jun 2025 04:13:04 +0530 Subject: [PATCH 4/4] Using loadImage and removing helper-function --- .../00_Async_Image_Loader/code.js | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js b/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js index 44e7f91b65..84d1657441 100644 --- a/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js +++ b/src/content/examples/en/16_Parallel_Loading_Promise/00_Async_Image_Loader/code.js @@ -20,9 +20,9 @@ async function setup() { // Use async/await with Promise.all to load all three images at once // This waits until ALL images are loaded before continuing [img1, img2, img3] = await Promise.all([ - loadImageAsync('https://picsum.photos/100/100?random=1'), // Replace the image links with user wanted images. - loadImageAsync('https://picsum.photos/100/100?random=2'), - loadImageAsync('https://picsum.photos/100/100?random=3') + loadImage('https://picsum.photos/100/100?random=1'), // Replace the image links with user wanted images. + loadImage('https://picsum.photos/100/100?random=2'), + loadImage('https://picsum.photos/100/100?random=3') ]); // Once all images are ready, draw them on the canvas @@ -35,12 +35,3 @@ async function setup() { text("All images loaded!", width / 2, 50); } -// Helper function to load images using a Promise -// Makes loadImage compatible with async/await style -function loadImageAsync(url) { - return new Promise((resolve, reject) => { - // Try to load the image from the given URL. - //If successful, resolve the promise with the image. If it fails, reject with the error. - loadImage(url, img => resolve(img), err => reject(err)); - }); -}