Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript顺序执行-延迟对象等_Javascript_Jquery - Fatal编程技术网

javascript顺序执行-延迟对象等

javascript顺序执行-延迟对象等,javascript,jquery,Javascript,Jquery,我需要计算在特定时间间隔(比如6秒)后加载到页面中的图像数量,然后需要进行一些处理 function scan_images_results ( ) { $.when(count_loaded_image()).then(function() { window.console.log("i m here"); }); } function count_loaded_image() { var counter = 0; $('img[id^="picThum

我需要计算在特定时间间隔(比如6秒)后加载到页面中的图像数量,然后需要进行一些处理

function scan_images_results ( ) {
   $.when(count_loaded_image()).then(function() {
    window.console.log("i m here");
    });
}

function count_loaded_image() {
    var counter = 0;
    $('img[id^="picThumbImg_"]').imagesLoaded()
        .progress( function( instance, image ) {
            var result = image.isLoaded ? 'loaded' : 'broken';
            console.log( 'image is ' + result + ' for ' + image.img.src );
        if(image.isLoaded) {
            counter++;
        }

        });

    console.log('counter--'+counter);
}
function scan_images_results() {
    var counter = 0;
    $('img[id^="picThumbImg_"]').imagesLoaded()
        .progress(function (instance, image) {
            var result = image.isLoaded ? 'loaded' : 'broken';
            console.log('image is ' + result + ' for ' + image.img.src);
            if (image.isLoaded) {
                counter++;
            }

        })
        .always(function () {
            console.log("I'm here");
        });

    console.log('counter--' + counter);
}
输出如下

counter--0
i m here
image is broken for https://myserver/cgi-bin/sf?f=58343d875e7a10290d0464cabfc276e5.jpg
image is broken for https://myserver/cgi-bin/sf?f=68343d875e7a10290d0464cabfc276e6.jpg
image is broken for https://myserver/cgi-bin/sf?f=78343d875e7a10290d0464cabfc276e7.jpg
.........
........ 28 times 
我正在使用“”检查图像是否已加载。我得到28个图像已损坏,这是正确的计数。但我的计数器功能稍后将被执行。即。我的预期产出是

image is broken for https://myserver/cgi-bin/sf?f=58343d875e7a10290d0464cabfc276e5.jpg
image is broken for https://myserver/cgi-bin/sf?f=68343d875e7a10290d0464cabfc276e6.jpg
image is broken for https://myserver/cgi-bin/sf?f=78343d875e7a10290d0464cabfc276e7.jpg
.........
........ 28 times 
counter--0
I m here

我知道问题在哪里?我需要按顺序执行函数,为此我需要创建延迟对象。但我无法解决我的问题

您不需要
$。当
时,您甚至不需要额外的功能

function scan_images_results ( ) {
   $.when(count_loaded_image()).then(function() {
    window.console.log("i m here");
    });
}

function count_loaded_image() {
    var counter = 0;
    $('img[id^="picThumbImg_"]').imagesLoaded()
        .progress( function( instance, image ) {
            var result = image.isLoaded ? 'loaded' : 'broken';
            console.log( 'image is ' + result + ' for ' + image.img.src );
        if(image.isLoaded) {
            counter++;
        }

        });

    console.log('counter--'+counter);
}
function scan_images_results() {
    var counter = 0;
    $('img[id^="picThumbImg_"]').imagesLoaded()
        .progress(function (instance, image) {
            var result = image.isLoaded ? 'loaded' : 'broken';
            console.log('image is ' + result + ' for ' + image.img.src);
            if (image.isLoaded) {
                counter++;
            }

        })
        .always(function () {
            console.log("I'm here");
        });

    console.log('counter--' + counter);
}
如果你想保留这个功能

function scan_images_results() {
    count_loaded_image().always(function () {
        console.log("I'm here");
    });
}

function count_loaded_image() {
    var counter = 0;
    return $('img[id^="picThumbImg_"]').imagesLoaded().progress(function (instance, image) {
        var result = image.isLoaded ? 'loaded' : 'broken';
        console.log('image is ' + result + ' for ' + image.img.src);
        if (image.isLoaded) {
            counter++;
        }
    });
}

scan\u images\u results
不会返回承诺对象,因此将其传递到$。when是没有意义的。您可能只需要
返回$('img[id^=“picThumbImg_”]')。imagesLoaded()
谢谢您的帮助。。所以您在这里使用的是ImagesLoadedAlways事件。我刚刚放置了“console.log('counter--'+counter);”内部活动始终如下所示。这是意料之中的。总是(函数(){console.log(“我在这里”);console.log('counter--'+counter);});是的,我总是使用,因为根据您看到的ouptut,永远不会调用done,只会失败,而且总是因为某些图像加载不正确。我只想再确认一次--是否需要触发扫描图像\u结果()6秒后,或者我可以像我提到的那样立即触发它?我想我可以立即调用它。6秒是用来做什么的?您应该能够立即触发它。实际上,图像是从代理服务器提供的。所以,若代理服务器的负载很高,那个么它就不能立即运行服务器映像。会有一些延误。所以,如果anytime image没有在6秒内加载,我想用other更改URL。我认为imagesloaded可以处理这种情况。我说得对吗?