【发布时间】:2017-10-02 23:05:49
【问题描述】:
有没有更好的方法来简单地捕获这里的所有错误,或者由于这个承诺链中有多个级别以及多个请求,我没有其他选择?
return RequesterService.get('peakBlockIndex', request)
.then(function(res) {
rangeData = res.data;
rangeData.intervals = [];
if (!rangeData.intervals || rangeData.intervals <= 0) {
return $q.reject({ message: 'Request returned no interval data.' });
}
return SiteService.getSite(rangeData.site.id)
.then(function(site) {
if (!site.zoneId) {
return $q.reject({ message: 'Request for zoneId failed for the given site.' });
}
return getDayAheadData(site.zoneId, start, end)
.then(function(data) {
return handleBlockRange(rangeData, data[0].data, data[1].data);
})
.catch(function(err) {
return $q.reject({ message: 'Request for cleared & forecasted data failed for the given site.' });
})
})
.catch(function(err) {
return $q.reject({ message: 'Request for zoneId failed for the given site.' });
})
})
.catch(function(err){
return $q.reject({ message: 'Request for block-range data failed.' });
});
}
【问题讨论】:
-
其实嵌套是没有必要的。有什么特殊原因吗?
-
我投票决定将此问题作为离题结束,因为它要求进行代码审查(因此这太宽泛/基于意见)。它可能会被调整为the code review stackexchange 的主题。
-
@Sirko 是的,实际上我需要从第一个请求中获得的数据来制作第二个,然后从第二个请求中获得第三个。
-
@ShawnRieger 这解释了多个调用,但不解释嵌套本身。乍一看,这可能都在同一个嵌套级别上。
-
其他一些旁注:如果出现错误,您当前总是返回相同的错误消息(最后一个)。我不确定,如果这真的是你的意图。
标签: javascript angularjs promise q