【问题标题】:How to access return value from deferred object?如何访问延迟对象的返回值?
【发布时间】:2013-01-10 09:26:35
【问题描述】:

我有以下代码在存储库中使用$.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()函数?

【问题讨论】:

  • $.when 块中的第二个自动解析对象有什么意义?
  • 抱歉,我不知道您指的是哪个对象 - 我刚刚开始使用 deferred 和 promises。基本上,我要做的就是执行 getUserDetails 并进行一些处理,包括返回一些数据,一旦完成,就使用这些数据作为其他两个函数的输入参数(不必按顺序执行)。如果有更好的方法,我真的很感兴趣?

标签: javascript jquery jquery-deferred


【解决方案1】:

您应该使用 "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();
        })

});

【讨论】:

  • 谢谢,我不得不返工,因为这是我想要的 getUserDetails 的返回,但这成功了。
猜你喜欢
  • 2018-04-12
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
相关资源
最近更新 更多