如何从延迟对象访问返回值?

时间:2013-01-10 09:26:35

标签: javascript jquery jquery-deferred

我有以下代码在存储库中使用$.getJSON来返回一些数据,然后由其他函数使用。

$.when(
    repository.getUserDetails().done(dataPrimer.getUserDetails),

    $.Deferred(
        function (deferred) {
           deferred.resolve();
        }
    )

).done(
   function () {
       repository.getUserPolicyTitles().done(dataPrimer.getUserPolicyTitles);
   },

   function () {
       repository.getUserPage().done();
   }
);

这有效,但我需要从repository.getUserDetails().done(dataPrimer.getUserDetails)返回一个值 可以用作repository.getUserPage().done();

的参数

getUserDetails的dataPrimer模块目前如下所示:

var getUserDetails = function (jsonString) {
    var object = parser.parse(jsonString);
    userDetails.userName = object.user.userName;
    userDetails.lastPolicyWorkedOn = object.user.lastPolicyWorkedOn;
    return userDetails.lastPolicyWorkedOn;
}

我尝试了一些诸如.pipe()这样的事情并没有带来快乐,并且想要确信我正在使用一种体面的方法,所以我正在寻找“最佳实践”方式来返回参数并使用请问repository.getUserPage()函数吗?

1 个答案:

答案 0 :(得分:0)

您应该使用"then"。示例中的“数据” - “getUserPolicyTitles”函数返回的数据。

$.when(
    repository.getUserDetails().done(dataPrimer.getUserDetails),

    $.Deferred(
        function (deferred) {
           deferred.resolve();
        }
    )

).done(function() {

    repository
        .getUserPolicyTitles()
        .done(dataPrimer.getUserPolicyTitles)
        .then(function(data) {
            repository.getUserPage().done();
        })

});