javascript - 将变量列表动态包含到 Jquery 函数中作为参数

标签 javascript jquery jquery-deferred

如果事先不知道变量的名称和数量,如何将变量列表动态注入(inject)函数。特别是:

我正在尝试替换这个“硬编码”版本:

$.when(img1Loaded,img2Loaded,img3Loaded).done(function () { ... 等

像这样:

$.when(MyDynamicList).done(function () { ... 等

在更广泛的上下文中,var MyDynamicList 可以用脚本填充,它保存来自宣布每个图像加载完成的函数的响应。也就是说,我需要引用一些声明如下的变量:

var img1Loaded = $.Deferred();

然后在“img.onload”函数中引用为:img1Loaded.resolve();

我的所有功能都适用于单个图像,但不适用于 2 个或更多...

类推:

var it=['#d1,#d2'];

$(it[0]).on( "click", function() {
    alert(this.id);
});

换句话说,如何为我的案例创建等效的“它”。这是完全错误的:var MyDynamicList= img1Loaded,.... imgNLoaded;

我对此一无所知...

最佳答案

也许您可以创建自己的“when”函数来使用 promises 处理数组:

function myWhen(dynamicList) {        
    const promises = dynamicList.map(item => new Promise( function(resolve,reject) {
        $.when(item).done(data => resolve(data));
    } ) );

    return Promise.all(promises);
}

const MyDynamicList = [$.ajax( "foo" ) , $.ajax( "bar.aspx" ) ...];

myWhen(MyDynamicList).then( items => {
    //do stuff
} ).catch(err => {
    //handle error
})

myWhen 应在 dynamicList 中的所有“thenables”解析时完成。

您可以在此处阅读有关 promise 的更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

希望对你有帮助

关于javascript - 将变量列表动态包含到 Jquery 函数中作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51895463/

相关文章:

javascript - Bootstrap 折叠类无法正确切换

jQuery Mobile 重用标题和导航

javascript - 如何改变 promise 链?

javascript - 如何将 jQuery Deferred 与自定义事件一起使用?

javascript - 面临错误 'firebase.auth() is not a function' Web 应用程序

javascript - 未捕获的 TypeError : ref. putString 不是函数

javascript - Node.js 文件系统 - 添加新文件时读取文件夹中的文件

jquery - Html 表单没有在 GET 上向 URL 添加参数

javascript - 具有多个依赖项的 jQuery ajax 调用链

javascript - 如何在回调函数之外访问数据表并从图表中添加/删除行?