ホームページ  >  記事  >  ウェブフロントエンド  >  Async/Await を使用して、コールバック ベースの画像読み込み関数を、同期画像データ アクセスのための Promise ベースのアプローチに変換するにはどうすればよいでしょうか?

Async/Await を使用して、コールバック ベースの画像読み込み関数を、同期画像データ アクセスのための Promise ベースのアプローチに変換するにはどうすればよいでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-02 13:09:03552ブラウズ

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>

この関数はコールバック アプローチを使用しますが、画像データに同期的にアクセスしようとすると制限が生じます。

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

のように、ready メソッド内で getImageData を呼び出すと、画像がまだ読み込まれていないため、unknown が取得されます。したがって、画像データにアクセスする前に、非同期手法を利用して画像の読み込み操作を処理する必要があります。

これを実現するには、次のように 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>

Nowでは、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。