Javascript 如何用承诺来简化这一点

Javascript 如何用承诺来简化这一点,javascript,angularjs,q,Javascript,Angularjs,Q,我有以下javascript函数: function render(id) { var deferred = $q.defer(); Flights.get(id).then(function(flightDto){ Arrivals.getDemoProfile(flightDto.id).then(function(arrivalDto) { self.arivalId = a

我有以下javascript函数:

function render(id) {

            var deferred = $q.defer();

            Flights.get(id).then(function(flightDto){

              Arrivals.getDemoProfile(flightDto.id).then(function(arrivalDto) {

                self.arivalId = arrivalDto.id;
                deferred.resolve(self);

              });

            });

            return deferred.promise;

}
有没有什么方法可以更好地简化使用promise的过程,使promise只在发出到达电话后才能解决?我正在使用angular和内置的$q库

function render(id) {
    return Flights.get(id).then(function(flightDto) {
        return Arrivals.getDemoProfile(flightDto.id).then(function(arrivalDto) {
            self.arivalId = arrivalDto.id;
            return self;
        });
    });
}
您在
中返回的任何内容都将被视为该承诺的解决方案。
除非你返回一个承诺,在这种情况下,这将被等待,结果将被视为该承诺的解决方案


这意味着您可以根据需要将函数嵌套得尽可能深,并且只需不断从嵌套函数返回即可。

承诺的好处在于,它们可以被链接而不是嵌套。这使得代码更加清晰和易于推理(例如,关于哪个先到)。以下是Buh Buh的答案中的代码,改进为链接第二个承诺,而不是嵌套:

function render(id) {
    return Flights.get(id)
        .then(function(flightDto) {
            return Arrivals.getDemoProfile(flightDto.id);
        })
        .then(function(arrivalDto) {
            self.arivalId = arrivalDto.id;
            return self; // I AM NOT SURE ABOUT THE USEFULNESS OF THIS LINE...
        })
    ;
}

是的,这可能更好。出于某种原因,我更喜欢筑巢,但我认为大多数人会建议使用链式。