【问题标题】:returning a promise that returns a promise?返回一个返回一个承诺的承诺?
【发布时间】:2015-11-27 15:59:58
【问题描述】:

我有点困惑如何做到这一点。这是我所拥有的:

resolve: {
   objectiveDetailsExam: ['objectiveDetailService', 'subjectService',
      function (objectiveDetailService: IObjectiveDetailService, subjectService: ISubjectService) {
         objectiveDetailService.getObjectiveDetailsExam("/" + subjectService.subject.id)
            .then((results): ng.IPromise<any> => {
               return objectiveDetailService.getObjectiveDetailsObjective("/" + objectiveDetailService.examId);
                            });
                    }]
        }

或者应该是这个在objectiveDetailService.getObjectiveDetailsExam之前有一个return

resolve: {
   objectiveDetailsExam: ['objectiveDetailService', 'subjectService',
      function (objectiveDetailService: IObjectiveDetailService, subjectService: ISubjectService) {
         return objectiveDetailService.getObjectiveDetailsExam("/" + subjectService.subject.id)
            .then((results): ng.IPromise<any> => {
               return objectiveDetailService.getObjectiveDetailsObjective("/" + objectiveDetailService.examId);
                            });
                    }]
            }

这两种方法似乎都有效,而且由于调用执行得很快,我看不出哪个是正确的。

有人可以建议我在解析中是否需要一两个返回值,应该返回真或假?

【问题讨论】:

标签: javascript angularjs typescript promise


【解决方案1】:

在第一个promise 的'body' 中返回第二个promise(或在传递给then 的函数中)会将第一个promise 与第二个promise 连接起来。两者结合产生的promise的结果将是后者的结果。

我很可能更喜欢后面的例子。在第一个示例中,您只返回undefined,这意味着无法从外部知道您的承诺何时真正解决。

如果您返回它,您可以将其取回并将其传送到某些代码,以便仅在它完成(或失败)时执行。这就是承诺的全部意义所在。

但是,老实说,很难弄清楚您的代码实际上在做什么,因此在这种特殊情况下,返回某些内容实际上可能毫无用处。以防万一,如果两者都有效,我仍然会退回它。即使您不能直接访问返回的 Promise,它仍然可能在幕后使用。在这种情况下,最好检查您的框架/库如何使用此值。

如果您有兴趣了解有关 Promise 以及如何正确使用它们的更多信息,here is a good article

【讨论】:

    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 2016-07-20
    • 1970-01-01
    • 2016-09-18
    • 2018-01-01
    相关资源
    最近更新 更多