如何确保jQuery $ .each在继续之前完成

时间:2013-09-13 00:19:21

标签: javascript jquery jquery-plugins

我正在研究一个带有add_record方法的jQuery插件(见下文)。如果查看函数定义,有两个$.each循环将值附加到plugin.payload。

现在,一切正常。但是,如果记录或选项真的很大怎么办?在发出传输呼叫之前,我是否需要关注$.each()未完成?

如果是这样,解决问题的最佳方法是什么?

plugin.add_record = function (records, options, callback) {
    if (typeof (options) == "function") {
        callback = options;
        options = undefined;
    }
    if (options) {
        $.each(options, function (index, value) {
            plugin.payload.append($(value));
        });
    }
    $.each(records, function (index, value) {
        plugin.payload.append($(value));
    });
    transmit('API_AddRecord', plugin.payload, 'db', function (data) {
        return typeof (callback) == "function" ? callback(data) : data;
    });
}

2 个答案:

答案 0 :(得分:7)

$.each是同步的,所以不用担心调用无法完成。你遇到麻烦的唯一一次是在循环中启动异步(比如ajax调用)。

答案 1 :(得分:1)

不需要担心,因为$.each.append()是同步函数。

只有在完成一个语句后才会同步执行语句,它将移动到下一个语句。

唯一的问题是,只有当你在循环中做一些异步操作时才会出现像ajax请求/动画等,在这种情况下你没有这样做