Javascript 在每个循环完成后运行jquery函数

Javascript 在每个循环完成后运行jquery函数,javascript,jquery,Javascript,Jquery,我有一个运行jquery函数的情况,在这个函数中我有一个each循环。每个循环都需要一些时间来处理,这就是为什么下一个语句在每个循环完成之前执行。这给我带来了一个问题。我想要一个函数在每个函数完成时执行。我的职能如下:- function myFunc() { // Do something $.each(mylist, function (i, val) { // do something filepicker.store(myList, function (stored_f

我有一个运行jquery函数的情况,在这个函数中我有一个each循环。每个循环都需要一些时间来处理,这就是为什么下一个语句在每个循环完成之前执行。这给我带来了一个问题。我想要一个函数在每个函数完成时执行。我的职能如下:-

function myFunc() {
// Do something

$.each(mylist, function (i, val) {
    // do something
    filepicker.store(myList, function (stored_fpfile) {
                    console.log("Store successful:", JSON.stringify(stored_fpfile));
                }, function (FPError) {
                   // Error
                }, function (progress) {
                    console.log("Loading: " + progress + "%");
                }
                );
});

CallMyFunction();
}
调用我的函数在每个循环完成之前执行

我不想使用列表计数来检测和运行我的过程。我想要一个可靠的解决方案

我正在使用InkFilePicker API将文件存储到Amazon


非常感谢您的帮助。

我建议为每个迭代生成延迟对象,然后将其存储在数组中。然后,在每次操作之后,您可以等到所有这些延迟对象完成后再运行其他函数

function myFunc() {
    // Do something
    var promiseArray = $.map(mylist, function (i, val) {
        return $.Deferred(function(def){
            // do something
            filepicker.store(val, function (stored_fpfile) {
                def.resolve(stored_fpfile);
            }, function (FPError) {
                def.reject(FPError);
            }, function (progress) {
                def.notify(progress); // won't actually be accurate
            });        
        }).promise();
    });
    $.when.apply($,promiseArray).done(function(){
        console.log(arguments); // array of results from onSuccess callbacks
        CallMyFunction();
    })

}

显然,存储是围绕AJAX对象的包装器。您应该测试进度,并在完成时调用CallMyFunction,就像在调用每个函数之前一样:

items = myList.length;
而在每个内部:

...
function (progress) {
    console.log("Loading: " + progress + "%");
    if (--items === 0)
    {
        CallMyFunction();
    }
}
...
没有任何反驳,性能不受此影响,您正在通过Internet发送数据,这是真正的瓶颈


这也是可靠的。如果出现错误,您也应该使用--items递减。

$。每个函数都是同步的。只有在每个函数完成后才会调用您的函数,除非每个函数内部都有一些异步处理,这些处理将在每个循环完成后继续。
Call my function在每个循环完成之前执行。
这是不可能的,$。每个函数都是同步的。若您的意思是等到每个文件中的所有异步内容都完成后,我们需要知道这些异步内容是什么。@KevinB对问题进行编辑以显示发生了什么。我更改了一部分,将
filepicker.store(mylist
更改为
filepicker.store)(val
因为它是
mylist
没有意义。它以什么方式不起作用?为什么不起作用?我可以用另一种类似于filepicker的方法创建此代码的演示。如果对filepicker.store的任何一个调用出现错误,CallMy函数将不会发生。我在fr中演示了此函数我的一部分,但它不起作用。我可以根据您的需要提供team viewer。这对我来说不足以帮助您使其发挥作用。team viewer或gotomeeting会话如何?