首頁 >web前端 >js教程 >如何使用 Async/Await 將基於回調的映像載入函數轉換為基於 Promise 的同步影像資料存取方法?

如何使用 Async/Await 將基於回調的映像載入函數轉換為基於 Promise 的同步影像資料存取方法?

Patricia Arquette
Patricia Arquette原創
2024-11-02 13:09:03661瀏覽

How can Async/Await be used to convert a callback-based image loading function into a promise-based approach for synchronous image data access?

使用Async/Await 將回調轉換為Promise

在JavaScript 中,以下函數從URL 擷取影像資料:

<code class="javascript">function getImageData(url) {
  const img = new Image();
  img.addEventListener('load', function() {
    return { width: this.naturalWidth, height: this.naturalHeight };
  });
  img.src = url;
}</code>

此函數使用回調方法,但在嘗試同步存取影像資料時有限制。如果您要在 Ready 方法中呼叫 getImageData,如下所示:

<code class="javascript">ready() {
  console.log(getImageData(this.url));
}</code>

您將獲得 undefined,因為映像尚未載入。因此,有必要在存取影像資料之前利用非同步技術來處理影像載入操作。

要實現這一點,您可以利用Promise 建構函數,如下所示:

<code class="javascript">function loadImage(url) {
  return new Promise((resolve, reject) => {
    const img = new Image();
    img.addEventListener('load', () => resolve(img));
    img.addEventListener('error', reject); // Handle error cases as well
    img.src = url;
  });
}</code>

現在,您可以使用async/await 等待loadImage Promise 並隨後擷取圖片資料:

<code class="javascript">async function getImageData(url) {
  const img = await loadImage(url);
  return { width: img.naturalWidth, height: img.naturalHeight };
}

async function ready() {
  console.log(await getImageData(this.url));
}</code>

在此修改後的實作中,async/await 確保程式碼暫停,直到loadImage Promise 解析,從而保證映像資料在記錄時可用。

以上是如何使用 Async/Await 將基於回調的映像載入函數轉換為基於 Promise 的同步影像資料存取方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn