使用async/await而不是promise来处理Javascript中的图像加载

使用async/await而不是promise来处理Javascript中的图像加载,javascript,async-await,Javascript,Async Await,我已经写了一个基于承诺的加载图像函数 function loadImage() { const img = new Image(); return new Promise((resolve, reject) => { img.addEventListener("load", () => { resolve(); }); img.addEventListener("error", () => {

我已经写了一个基于承诺的加载图像函数

function loadImage() {
    const img = new Image();


    return new Promise((resolve, reject) => {
      img.addEventListener("load", () => {
        resolve();
      });

      img.addEventListener("error", () => {
        reject();
      });

      img.src = 'assets/myImg.jpg';
    });
}

loadImage.then(
  () => console.log('image loaded'),
  () => console.error('image did not load')
);

我想使用async/await转换它,但实际上我很难做到这一点。你知道怎样才能做到吗

只需做一些更改,就可以让它正常工作。 异步等待端通常会取代.then链接

首先,保持loadImage函数不变,并定义一个附加的异步函数来运行异步等待代码。我已经把这叫做主要的。然后可以创建一个变量,例如LoadeImage,然后等待promise函数。在这种情况下,这将暂停执行下一步,即控制台日志,直到承诺已解决/拒绝并加载映像

async function main() {
    let loadedImage = await loadImage();
    console.log(loadedImage);
}

main()
此外,如果您希望实际将一个值返回到LoadeImage变量中,因为此时它将是未定义的,那么您可以在promise resolve中放置一个值。例如:


解析“图像已加载”

只需做几处更改,即可使其正常工作。 异步等待端通常会取代.then链接

首先,保持loadImage函数不变,并定义一个附加的异步函数来运行异步等待代码。我已经把这叫做主要的。然后可以创建一个变量,例如LoadeImage,然后等待promise函数。在这种情况下,这将暂停执行下一步,即控制台日志,直到承诺已解决/拒绝并加载映像

async function main() {
    let loadedImage = await loadImage();
    console.log(loadedImage);
}

main()
此外,如果您希望实际将一个值返回到LoadeImage变量中,因为此时它将是未定义的,那么您可以在promise resolve中放置一个值。例如:

解析“图像已加载”

您可以等待loadImage函数,但新的图像对象不使用承诺,它使用您用承诺包装的事件

在异步函数内部,您可以等待loadImage函数,如下所示:

async function loadImage() {
    const img = new Image();

    return new Promise((resolve, reject) => {
      img.addEventListener("load", () => {
        resolve();
      });

      img.addEventListener("error", () => {
        reject();
      });

      img.src = 'assets/myImg.jpg';
    });
}

async function doSomething() {
  try {
    await loadImage();
    console.log("image loaded");
  } catch(e) {
    console.error("image did not load");
  }
}

您可以等待loadImage函数,但新的Image对象不使用承诺,它使用您用承诺包装的事件

在异步函数内部,您可以等待loadImage函数,如下所示:

async function loadImage() {
    const img = new Image();

    return new Promise((resolve, reject) => {
      img.addEventListener("load", () => {
        resolve();
      });

      img.addEventListener("error", () => {
        reject();
      });

      img.src = 'assets/myImg.jpg';
    });
}

async function doSomething() {
  try {
    await loadImage();
    console.log("image loaded");
  } catch(e) {
    console.error("image did not load");
  }
}


你想取代新的承诺。。使用异步/等待?你不能。你想取代那个新的承诺吗?你想取代这个新的承诺。。使用异步/等待?你不能。你想取代那个新的承诺吗。。。??