3

我正在尝试加载相同的图像,但分辨率不同,一张一张,首先是 1.png,然后是 2.png,然后是 3.png,在 Promise 的帮助下,但是当我运行代码时,它只加载 3.png图片,我做错了什么?

function loadi(srce){
        if(srce!='3.png'){
        $img1.attr('src',srce).on('load',function(){

            return loadImag();
        });
        }
        else{
            $img1.attr('src',srce).on('load',function(){
                console.log("Load successful");
            });
        }
    }
    function loadImag(){
        return new Promise(function(fulfill,reject){
            fulfill();
        }); 
    }
    loadImag()
            .then(loadi('1.png'),null)
            .then(loadi('2.png'),null)
            .then(loadi('3.png'),null);

第一个建议后的新代码,仍然面临同样的问题,只有一个图像被加载,如在 chrome 开发工具中看到的那样

function loadi(srce){

            return loadImage(srce);

    }

    function loadImage(src) {
        return new Promise(function(resolve, reject) {
            $img1.attr('src',src).on('load',function(error){

                     resolve(); 
            });
// Run image loading logic here
// Call resolve() when loading complete, or reject() when fails.
        });
    }

    loadImage('1.png')
            .then(loadi('2.png'))
            .then(loadi('3.png'))
            .then(function() { 
                console.log('Load successful!'); 
            }) // Not in loadImage().
            .catch(function(err) { 
                        console.log("Error");/* Handle potential errors */
});
4

1 回答 1

3

您的代码几乎没有问题:

  • loadi不返回承诺。从回调返回不能按预期工作。
  • loadImag基本可以换成Promise.resolve()
  • .then()期待一个函数,你正在传递函数的结果。

您的代码应如下所示:

function loadImage(src) {
  return new Promise(function(resolve, reject) {
    // Run image loading logic here
    // Call resolve() when loading complete, or reject() when fails.
  )};
}

loadImage('1.png')
  .then(function() { return loadImage('2.png'); })
  .then(function() { return loadImage('3.png'); })
  .then(function() { console.log('Load successful!'); }) // Not in loadImage().
  .catch(function(err) { /* Handle potential errors */ });
于 2016-01-04T09:16:02.973 回答