如何用承诺来简化这个
How to simplify this with promises
我有以下 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;
});
});
}
您 return
在 then
中的任何内容都将被视为该承诺的解决。
除非你 return 一个承诺,在这种情况下,将等待,结果将被视为该承诺的解决。
这意味着您可以根据需要将 then 嵌套得尽可能深,并且只需要 returning 来自嵌套函数。
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...
})
;
}
我有以下 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;
});
});
}
您 return
在 then
中的任何内容都将被视为该承诺的解决。
除非你 return 一个承诺,在这种情况下,将等待,结果将被视为该承诺的解决。
这意味着您可以根据需要将 then 嵌套得尽可能深,并且只需要 returning 来自嵌套函数。
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...
})
;
}