功能内的js函数并等待返回值

Lau*_*ovs 4 javascript jquery function

$(document).ready(function(){

    // Global function (will be include in any HTML file)
    function m3_result(size_1, size_2, size_3){
        $.get('http://www.google.com', function(data){
            return data;
        });
    }   

    // Another function
    function calculate(){
        var size_1 = parseFloat($('#add_document_form #size_1').val());
        var size_2 = parseFloat($('#add_document_form #size_2').val());
        var size_3 = parseFloat($('#add_document_form #size_3').val());          
        var ax = m3_result(size_1, size_2, size_3);

        alert(ax); // Here ax return: UNDEFINED  
    }

    // Run
    calculate();
});
Run Code Online (Sandbox Code Playgroud)

结果是“未定义的”,但是我希望calculate()将等待m3_result()执行。我看到当我添加$ .get()时这里出现了问题,但是它是必需的...

我正在搜索类似callback()的函数,但都不适合我的需要,或者我只是没有正确地说明这一点。任何帮助将不胜感激,谢谢。


GET URL将是本地语言,元素ID也可以。

Aln*_*tak 5

您不能从异步函数返回结果,而是可以返回一个承诺,以后再提供该值,恰好是:jqXHR返回的对象$.get

function m3_result() {
     return $.get(...)
}
Run Code Online (Sandbox Code Playgroud)

并在计算中做同样的事情:

function calculate() {
    ...
    return m3_result(...); 
}
Run Code Online (Sandbox Code Playgroud)

然后等待结果,该结果将作为参数传递给使用该.done函数注册的回调:

calculate().done(function(result) {
    alert(result);
});
Run Code Online (Sandbox Code Playgroud)

  • @BenjaminGruenbaum在骗局中提到了它,但它在许多其他可能的解决方案中被隐藏了。我总是使用这种方法。无论如何,我认为给OP一个具体示例以说明如何将该技术用于_their_用例通常是有用的。 (2认同)