使用jQuery Isotope了解setTimeout()和回调

山姆·奥尔金(Sam Holguin)

试图让我了解方法排序,setTimeout()和回调。

setTimeout()函数完成后,我需要调用Isotope方法layout(),否则布局将关闭并且元素重叠。

// <--- CODE

this.timeout = 400;

this.update = function() {
    window.setTimeout(function() {
        $(".item.is-loading").each(function(index) {
            var _time = 100 * index,
                $this = $(this);
            window.setTimeout(function() {
                $this.removeClass("is-loading").find("img").css({
                    width: "100%",
                    height: "auto"
                });
            }, _time);
        })
    }, instance.timeout);

    instance.feed.isotope("layout");
};

// ---> CODE

我可以看到layout()在setTimoute()完成之前就被调用了,因为它是异步的,但是如果不使用另一个setTimeout,我想不出一种解决该问题的好方法?

阿尼塔克

您应该可以使用jQuery Promise解决此问题(无双关语!):

this.update = function() {

    // immediately create an array of deferred objects, one for
    // each element in the list below
    var defs = $(".item.is-loading").map(function() {
        return $.Deferred();
    }).get();

    window.setTimeout(function() {
        $(".item.is-loading").each(function(index) {
            var _time = 100 * index,
                $this = $(this);
            window.setTimeout(function() {
                $this.removeClass("is-loading").find("img").css({
                    width: "100%",
                    height: "auto"
                });
                defs[index].resolve();   // flag that this deferred task finished
            }, _time);
        })
    }, instance.timeout);

    // once they're all done, update the layout
    return $.when.apply($, defs).then(function() {
        instance.feed.isotope("layout");
    });
};

defs必须立即创建数组,否则$.when进一步调用将无法进行。

当每个内部setTimeout调用完成时,defs“解析”中的各个条目,并且该$.when()调用确保仅当它们全部解析后,布局才会更新。

此外,update函数本身现在还返回了一个Promise,因此您可以在整个异步任务完成时同步其他事件。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

了解回调函数jQuery

来自分类Dev

使用简单示例了解Javascript回调

来自分类Dev

在setState回调中使用setTimeout

来自分类Dev

this 和 $(this) 之间的区别以及使用 jQuery 的事件回调函数

来自分类Dev

使用Node.js更好地了解回调

来自分类Dev

试图了解THREEJS中使用的回调函数

来自分类Dev

jQuery回调html和json

来自分类Dev

setTimeout回调后使用“ this”与nodejs / js产生奇怪关系

来自分类Dev

使用click()和setTimeout()jQuery

来自分类Dev

使用Ajax的JavaScript / jQuery回调

来自分类Dev

使用jquery推迟而不是回调

来自分类Dev

使用jQuery Ajax在firefox中未调用错误和完整的回调

来自分类Dev

JavaScript异步回调-Promise和setTimeout

来自分类Dev

JavaScript异步回调-Promise和setTimeout

来自分类Dev

Javascript:setTimeout,for循环和回调函数

来自分类Dev

jQuery:slideToggle和即时回调,无需微暂停

来自分类Dev

jQuery Filtr.js和Packery回调

来自分类Dev

Ember JS和jquery-ui回调范围

来自分类Dev

胖箭头函数的作用域和jQuery回调

来自分类Dev

jQuery加载回调

来自分类Dev

jQuery iCheck回调

来自分类Dev

jQuery Promise回调

来自分类Dev

jQuery .load() 回调

来自分类Dev

jQuery 回调语法

来自分类Dev

在$ http回调中使用AngularJS和Typescript使用'this'

来自分类Dev

jQuery。使用setTimeout延迟

来自分类Dev

如何在Meteor中使用查找和回调

来自分类Dev

使用android和sdl从c ++进行java回调

来自分类Dev

在回调与外部变量和垃圾回收器中使用“ this”