为什么要在数组映射回调中放入异步等待?

Eitanos30

我的问题与我看到的示例有关(如下)。该示例加载图像,然后在屏幕上显示它们。据我所知作者的目标是所有图像都将在同一时间加载,但是我不明白异步等待机制如何帮助他实现这一目标?有问题的线是:

imgArr.map(异步img =>等待createImage(img));

码:

  const wait = function (seconds) {
     return new Promise(function (resolve) {
       setTimeout(resolve, seconds * 1000);
  });
};

 const imgContainer = document.querySelector('.images');

const createImage = function (imgPath) {
  return new Promise(function (resolve, reject) {
    const img = document.createElement('img');
    img.src = imgPath;

    img.addEventListener('load', function () {
      imgContainer.append(img);
      resolve(img);
    });

    img.addEventListener('error', function () {
      reject(new Error('Image not found'));
    });
  });
};


const loadAll = async function (imgArr) {
  try {
    const imgs = imgArr.map(async img => await createImage(img));
    const imgsEl = await Promise.all(imgs);
    console.log(imgsEl);
    imgsEl.forEach(img => img.classList.add('parallel'));
  } catch (err) {
    console.error(err);
  }
};
loadAll(['img/img-1.jpg', 'img/img-2.jpg', 'img/img-3.jpg'])

;

imgArr.map(异步IMG => AWAIT的createImage(IMG)); 与以下内容完全相同:

for (img of imgArr)
{
    await createImage(img);
}
尼古拉斯塔

此代码同步创建多个<img>元素并设置其src在img上设置src会导致浏览器开始下载该图像,并且浏览器可以一次下载多个图像。

唯一的作用await是我们需要知道何时完成下载。每个图像下载都包装在一个Promise中,然后使用组合这些Promise Promise.all通过等待合并的承诺,一旦所有下载完成,我们就可以恢复我们的代码。

如评论中所述,await中的.map是无用的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么代码没有在数组中放入任何内容?

来自分类Dev

为什么要在结构中放入结构的大小?

来自分类Dev

为什么要在HTML代码中放入图片大小

来自分类Dev

为什么要在数组O(1)中查找?

来自分类Dev

为什么要在routerLink Angular中放斜线?

来自分类Dev

为什么异步数组映射返回承诺而不是值

来自分类Dev

为什么异步等待不等待 - nodejs

来自分类Dev

如果需要等待,为什么回调被认为是异步的

来自分类Dev

为什么异步/等待不异步运行?

来自分类Dev

JS异步/等待-为什么等待需要异步?

来自分类Dev

为什么要在Javascript的array.forEach回调中提供数组参数?

来自分类Dev

为什么我需要在数组中附加一个 NUL 字符?

来自分类Dev

为什么表达式需要在数组的括号中

来自分类Dev

异步回调并等待

来自分类Dev

为什么要在conf / httpd.conf中放入一些配置信息,并在conf.d文件夹中的文件中放入一些配置信息?

来自分类Dev

为什么我无法检索Java中放入HttpSession的对象?

来自分类Dev

为什么我在android中放入MutableLiveData后得到Null

来自分类Dev

为什么要在类中放置框架和小部件?

来自分类Dev

为什么异步等待抛出NullReferenceException?

来自分类Dev

在数组的排序功能中实现异步/等待

来自分类Dev

为什么获取请求在数组映射中不起作用?

来自分类Dev

在数组中放入一个数字,并将其从 char 转换为 int

来自分类Dev

为什么要在数组中为var返回一个字符串索引?

来自分类Dev

我的程序不会输出我输入要在数组中搜索的第一个值。为什么?

来自分类Dev

为什么要在REST API中回调?

来自分类Dev

为什么要在addEventListener回调内部调用removeEventListener?

来自分类Dev

异步/等待比回调慢

来自分类Dev

为什么程序要在数字的末尾添加额外的 0?

来自分类Dev

为什么要在数据集中裁剪数据?

Related 相关文章

  1. 1

    为什么代码没有在数组中放入任何内容?

  2. 2

    为什么要在结构中放入结构的大小?

  3. 3

    为什么要在HTML代码中放入图片大小

  4. 4

    为什么要在数组O(1)中查找?

  5. 5

    为什么要在routerLink Angular中放斜线?

  6. 6

    为什么异步数组映射返回承诺而不是值

  7. 7

    为什么异步等待不等待 - nodejs

  8. 8

    如果需要等待,为什么回调被认为是异步的

  9. 9

    为什么异步/等待不异步运行?

  10. 10

    JS异步/等待-为什么等待需要异步?

  11. 11

    为什么要在Javascript的array.forEach回调中提供数组参数?

  12. 12

    为什么我需要在数组中附加一个 NUL 字符?

  13. 13

    为什么表达式需要在数组的括号中

  14. 14

    异步回调并等待

  15. 15

    为什么要在conf / httpd.conf中放入一些配置信息,并在conf.d文件夹中的文件中放入一些配置信息?

  16. 16

    为什么我无法检索Java中放入HttpSession的对象?

  17. 17

    为什么我在android中放入MutableLiveData后得到Null

  18. 18

    为什么要在类中放置框架和小部件?

  19. 19

    为什么异步等待抛出NullReferenceException?

  20. 20

    在数组的排序功能中实现异步/等待

  21. 21

    为什么获取请求在数组映射中不起作用?

  22. 22

    在数组中放入一个数字,并将其从 char 转换为 int

  23. 23

    为什么要在数组中为var返回一个字符串索引?

  24. 24

    我的程序不会输出我输入要在数组中搜索的第一个值。为什么?

  25. 25

    为什么要在REST API中回调?

  26. 26

    为什么要在addEventListener回调内部调用removeEventListener?

  27. 27

    异步/等待比回调慢

  28. 28

    为什么程序要在数字的末尾添加额外的 0?

  29. 29

    为什么要在数据集中裁剪数据?

热门标签

归档