我是否可以假设承诺中的错误会冒泡到新的承诺并抓住它
Can I assume that error in a promise will bubble to new Promise and catch that?
>我有一个函数,如果它找到任何东西,它将查找缓存,否则它将继续获取数据并设置缓存。这是非常标准的。我想知道如果错误发生在最内部的功能,它会保持气泡到最外部的承诺吗?所以,我可以只有一个catch
而不是一个。
这是我的代码。
我正在使用蓝鸟
var _self = this;
return new Promise(function(resolve, reject) {
_self.get(url, redisClient).then(function getCacheFunc(cacheResponse) {
if(cacheResponse) {
return resolve(JSON.parse(cacheResponse));
}
webCrawl(url).then(function webCrawl(crawlResults) {
_self.set(url, JSON.stringify(crawlResults), redisClient);
return resolve(crawlResults);
}).catch(function catchFunc(error) {
return reject(error); // can I delete this catch
});
}).catch(function getCacheErrorFunc(cacheError) {
return reject(cacheError); // and let this catch handle everything?
});
});
是的,对于深度嵌套的承诺,可以有一个.catch(...)
。 诀窍:你可以用另一个承诺来解决一个承诺。 这意味着您可以重构代码以:
var _self = this;
_self.get(url, redisClient)
.then(function(cacheResponse) {
if(cacheResponse) {
// Resolve the Promise with a value
return JSON.parse(cacheResponse);
}
// Resolve the Promise with a Promise
return webCrawl(url)
.then(function(crawlResults) {
_self.set(url, JSON.stringify(crawlResults), redisClient);
// Resolve the Promise with a value
return crawlResults;
});
})
.catch(function(err) {
console.log("Caught error: " + err);
});
注意:我还删除了您最外层的承诺声明。 这不再是必需的,因为_self.get(...)
已经返回了一个承诺。
假设.get
返回一个承诺,你会这样写:
var _self = this;
return _self.get(url, redisClient).then(function(cacheResponse) {
if (cacheResponse) {
return JSON.parse(cacheResponse);
} else {
return webCrawl(url).then(function(crawlResults) {
_self.set(url, JSON.stringify(crawlResults), redisClient);
return crawlResults;
})
}
});
没有必要引入新的承诺,因为你已经从你的_self.get
那里得到了一个承诺
相关文章:
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 承诺-如何正确地将错误附加到此示例
- 我能处理来自gap.client.load'的错误吗;的承诺
- $q.reject和处理AngularJS链接承诺中的错误
- 如何在使用替代承诺时解释 ajax 调用中的错误
- 处理角度.js承诺错误状态
- 为什么承诺会捕获语法错误
- Chai正如承诺:当承诺抛出错误时,处理错误
- 如何创建角度承诺中捕获的错误
- JS bluebird承诺错误没有给出任何细节
- 蓝鸟(或其他承诺库)保持承诺错误堆栈跟踪
- 异常捕获在功能上是否与承诺错误回调相同
- 如何在加载文件后将承诺错误传播到更高的承诺级别
- ES6承诺错误处理
- 多个承诺错误(承诺必须通过new构造)
- Nodejs承诺错误的使用
- 承诺错误/异常处理设计
- 处理链条中的承诺错误,是不是太急切了
- AngularJS - Firebase -承诺错误
- 如何正确处理请求-承诺错误