用Promise.all加载图像

时间:2019-12-03 14:00:57

标签: javascript promise

我正在尝试使用Promise.all加载图像,
但状态仍然令人绝望

const images =
        { menu: { img:null , path:'images/Menu.png', status:'none' }
        , map : { img:null , path:'images/a6.png'  , status:'none' }
        };

function loadImage( ref ) {
  return new Promise(function (resolve) {

    console.log( ref.path );

    ref.img = new Image();

    ref.img.onload  =_=>{ ref.status='OK';  resolve() };
    ref.img.onerror =_=>{ ref.status='bad'; resolve() };

    ref.img.src = ref.path;
  });
}

Promise
  .all([ loadImage(images.menu), loadImage(images.map) ])
  .then()
    {
    console.log('menu:', images.menu.status);
    console.log('map :', images.map.status);
    };

控制台:

  

images / Menu.png
    images / a6.png
    菜单:无
    地图:无

我想念什么?

(请仅使用JS-es6)

2 个答案:

答案 0 :(得分:1)

then()需要使用回调函数。您正在运行then()并进行任何回调。

尝试一下:

Promise
  .all([ loadImage(images.menu), loadImage(images.map) ])
  .then(function(){
    console.log('menu:', images.menu.status);
    console.log('map :', images.map.status);
  });

当所有承诺结束时,将调用您作为then()回调传递的函数。请注意我如何使用函数作为参数来调用then(function...)

答案 1 :(得分:0)

此语法

Promise
  .all([ loadImage(images.menu), loadImage(images.map) ])
  .then()
    {
    console.log('menu:', images.menu.status);
    console.log('map :', images.map.status);
    };

不对。我想你的意思是这样:

Promise
  .all([ loadImage(images.menu), loadImage(images.map) ])
  .then(function(){
     console.log('menu:', images.menu.status);
     console.log('map :', images.map.status);
  });