如何从延迟对象的函数一到函数二获取值?

时间:2016-01-16 13:46:50

标签: jquery

我已经能够实现一个延迟对象,但我现在正试图从第二个函数中的第一个函数访问一个值。

我不确定我是否只是不理解我应该在functionOne()中返回什么,或者是否延迟对象不是以这种方式工作的。

如何在第二个功能中访问functionOne() getJSON()的结果?

function functionOne(x, y) {
    var r = $.Deferred();
    $.getJSON("/my_path", {
        k1: x,
        k2: y,
        format: 'json'
    }, function (results) {

    });

    setTimeout(function () {
        r.resolve();
    }, 2500);

    return r;
}

$(document).ready(function () {
    functionOne(x, y).done(function (results) {
        // how do i access keys from functionOne's getJSON results?
        var myVar1 = results.great_key_1;
        var myVar2 = results.great_key_2;
    });
});

1 个答案:

答案 0 :(得分:2)

只需返回$.ajax

返回的承诺
function functionOne(x, y) {
    return $.getJSON("/my_path", {
        k1: x,
        k2: y,
        format: 'json'
    });
}

您的版本有点反模式,但要看到它的工作原理,您需要将ajax结果传递给resolve()。我只是展示了这个,因为你实施了延迟,并且能够看到延迟的全部效果。否则你应该真的使用我的第一个版本

function functionOne(x, y) {
    var r = $.Deferred();
    $.getJSON("/my_path", {
        k1: x,
        k2: y,
        format: 'json'
    }, function (results) {
         setTimeout(function () {
            r.resolve(results);// resolve with data
         }, 2500);
    });

    return r.promise;
}