kyl*_*art 4 javascript promise angularjs
为什么下面的代码没有捕获引发的异常?
$http.get(null) // <- this throws a fit
.catch(function (e) {
console.log(e); // <- this is not being triggered
});
Run Code Online (Sandbox Code Playgroud)
错误:[$ http:badreq] Http请求配置url必须是字符串或$ sce受信任对象。收到:null https://errors.angularjs.org/1.7.2/$http/badreq?p0=null
您需要了解这catch是在等待您的get呼叫“拒绝”。
换句话说,你$http.get正在触发一个错误并且永远不会返回一个承诺......这样,你就不能直接从错误中执行 catch ,明白吗?
如果你拥有$http.get("xyz")它,它就会做它的事情并拒绝,因此,被你的捕获物捕获。
你正在做的事情会导致这样的结果
// step 1
$http.get(null)
.catch()
// step 2
ERROR
.catch() // will not even get here, but if it did, it wouldn't work either
Run Code Online (Sandbox Code Playgroud)
然而,如果你get可以工作,但被拒绝了,你会:
// step 1
$http.get('someFailingURL')
.catch()
// step 2
RejectedPromise
.catch() // gonna work :)
Run Code Online (Sandbox Code Playgroud)
如果您的网址来自不同的来源(这就是为什么您null有时会获得它的值),您可能应该在尝试获取它之前验证它,如下所示:
if (yourVariableURL !== null) {
$http.get(yourVariableURL)
.catch()
} else {
console.log('Invalid url');
}
Run Code Online (Sandbox Code Playgroud)
.catch()不能代替普通的try catch。
它专门用于处理在承诺解决过程中发生的特殊情况。
在这种情况下,异常(引发拟合)发生在承诺解决流程之外。
您向$http.get方法提供的无效输入会导致XHR甚至在创建XHR之前就发生异常,这并不是 HTTP请求或任何后续处理出错的原因。
这等效于正在发生的事情:
try {
$http.get(throwAnException())
// .catch isn't even being evaluated!
.catch(function(e) {
console.error(e); // no chance of being called
});
} catch (e) {
// I would be evaluated
console.error(e);
}
function throwAnException() {
throw "An error before we even start";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2061 次 |
| 最近记录: |