当另一个异步函数结束时,Javascript调用函数

时间:2015-10-08 18:16:12

标签: javascript function asynchronous

我有一个实现一些httprequest的功能。当所有这些请求完成时,我需要刷新父窗口并关闭当前窗口。 但是现在当前窗口在完成请求之前关闭,并且请求未正确完成。 这是我的代码:

<script>
        function save()
        {

            $.when( insert() ).done(function() {
                opener.location.reload();
                window.close();
            });

        }

        function insert()
        {
            $('select').each(function () {
                var idTraslado = $(this).attr("id");
                var accion = $(this).val();

                //the page realizes mysql updates. 
                xmlhttp = new XMLHttpRequest();
                xmlhttp.open("GET","trasladosEliminarMultipleGuardar.php?idTraslado="+idTraslado+"&accion="+accion+"&motivo="+motivo,true);
                xmlhttp.send();
            });
        }
    </script>

1 个答案:

答案 0 :(得分:1)

你必须使用promises,否则when在你的代码中没用:

function save()
{
    $.when(insert()).done(function () {
        opener.location.reload();
        window.close();
    });
}

function insert()
{
    var promises = [];
    $('select').each(function () {
        var deferred = $.Deferred();
        var idTraslado = $(this).attr("id");
        var accion = $(this).val();

        //the page realizes mysql updates. 
        xmlhttp = new XMLHttpRequest();
        xmlhttp.onload = function (response) {
            deferred.resolve(response);
        };
        xmlhttp.open("GET", "trasladosEliminarMultipleGuardar.php?idTraslado=" + idTraslado + "&accion=" + accion + "&motivo=" + motivo, true);
        xmlhttp.send();
        promises.push(deferred.promise());
    });
    return promises;
}