如何用promises简化这一点

时间:2016-08-02 08:28:39

标签: 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 = arrivalDto.id;
                deferred.resolve(self);

              });

            });

            return deferred.promise;

}

有没有什么方法可以使用promise更好地简化,以便承诺只能在到达呼叫后解决?我正在使用angular和内置的$ q库。

2 个答案:

答案 0 :(得分:4)

function render(id) {
    return Flights.get(id).then(function(flightDto) {
        return Arrivals.getDemoProfile(flightDto.id).then(function(arrivalDto) {
            self.arivalId = arrivalDto.id;
            return self;
        });
    });
}

returnthen内的任何内容都将被视为该承诺的决心 除非您返回一个承诺,在这种情况下将等待,并且结果将被视为该承诺的决心。

这意味着您可以根据需要深入嵌套,然后继续从嵌套函数返回。

答案 1 :(得分:1)

关于promises的好处是它们可以链接而不是嵌套。这使代码更清晰,更容易推理(例如,首先是代码)。以下是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...
        })
    ;
}