- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
是否有更好的方法来简单地捕获此处的所有错误,或者由于此 promise 链中有多个级别且具有多个请求,所以我没有其他选择?
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.' });
});
}
最佳答案
快速浏览一下,您应该能够完全删除嵌套,如下所示。请注意,如果出现错误,这将始终返回消息 Request for block-range data failed.
,类似于您的代码。原因是,使用 $q.reject()
只会跳过 Promise 链的执行,直到下一个 catch()
处理程序。当您将这样的处理程序放在代码末尾时,所有错误都将在此处捕获。
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 block-range data failed.' });
});
使用较新的async
/await
语法,可以提高可读性。这次返回的是实际匹配的错误信息。 (请注意,也可以使用上面的语法返回特定的错误消息)。
async function someRequest( request ){
let res;
try{
res = await RequesterService.get('peakBlockIndex', request);
} catch(e){
return $q.reject({ message: 'Request for block-range data failed.' });
}
rangeData = res.data;
rangeData.intervals = [];
if (!rangeData.intervals || rangeData.intervals <= 0) {
return $q.reject({ message: 'Request returned no interval data.' });
}
let site;
try {
site = await SiteService.getSite(rangeData.site.id);
} catch(e) {
return $q.reject({ message: 'Request for zoneId failed for the given site.' });
}
if (!site.zoneId) {
return $q.reject({ message: 'Request for zoneId failed for the given site.' });
}
let data;
try{
data = getDayAheadData(site.zoneId, start, end);
} catch(e){
return $q.reject({ message: 'Request for cleared & forecasted data failed for the given site.' });
}
return handleBlockRange(rangeData, data[0].data, data[1].data);
}
关于javascript - 我是否正确地履行了这些 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46527122/
实现的在线 shopify 文档显示了这个例子: POST /admin/orders/#{id}/fulfillments.json { "fulfillment": { "tra
我有检查数组中值的函数 const arr = [10,20,30]; const check = (needle) => { return new Promi
promise.each(function(obj){ obj.doIntensiveWork() .then(function(){ console.log("I A
我正在从 Protractor 切换到 Nightwatch.js,我在 Nightwatch 处理 promise 的方式上遇到了一些困难。 举个例子,我正在尝试计算满足给定条件的元素的数量。计数函
我正在尝试使用 DialogFlow 实现 Webhook 来访问我的应用程序,但每当我发出请求时,它都会返回: POST /webhook 500 INTERNAL SERVER ERROR 来自n
使用 BlueBird promise ,我尝试将 getCredentials 变成一个将作为 getCredentials.then(function() { do this and that }
我正在使用 Dialogflow 和 Actions on Google 开发一个应用程序,该应用程序需要在 Google Assistant 中发送每日生日通知。 我正在关注this documen
对于摩卡测试,我想断言 promise 最终会拒绝。 我不想使用 chai-as-promised。我更愿意只使用 Node 的标准断言模块,并且只使用标准 ES6 Promise。 我想出的最好的就
我想用其他 promise 来履行 promise 。重点是,我真的很想在第一个 promise 实现后立即访问(仍在等待中的)第二个promise。不幸的是,我似乎只能在两个 promise 都实现
我正在使用 Node.js 开发一个使用用户证书的项目。我需要以阻塞方式同步生成它们,但我使用的库(pem)只有异步函数(回调)。我尝试了多种方法来解决这个问题,但我的尝试都没有成功。我的代码如下所示
我试图表达如下内容: it("should use the 'text' mode", () => { let usedMockMode = false; let env = new
我是一名优秀的程序员,十分优秀!