Javascript Promise 异常处理
Javascript Promise Exception Handling
我试图了解以下场景中的承诺异常处理。第二个调试器语句首先停止,并记录错误。为什么是这样?我以为只有 'then' 块抛出错误才能进入异常块?
api.then(response => {
debugger; //1
dispatch(fetchReceive(response)); //never executes
})
.catch((err) => {
debugger; //2
console.error(err); //err.status = 404
});
我正在使用以下 npm 包:
"babel-cli": "6.14.0",
"babel-core": "6.9.1",
"babel-loader": "6.2.4",
"babel-plugin-transform-class-properties": "6.10.2",
"babel-plugin-transform-object-rest-spread": "6.8.0",
"babel-plugin-transform-react-constant-elements": "6.9.1",
"babel-plugin-transform-react-inline-elements": "6.8.0",
"babel-polyfill": "6.16.0",
"babel-preset-es2015": "6.9.0",
"babel-preset-es2017": "6.16.0",
"babel-preset-react": "6.5.0",
"babel-register": "6.9.0",
请记住,承诺不是行动,而是价值。 api
是某个调用的结果,该结果可能已经是一个错误。
const api = Promise.reject(new Error("I'm rejected!"));
api
.then(value => console.log("I'm resolved!", value))
.catch(err => console.error("I'm rejected!", err.message));
在这种情况下,.then()
将被跳过并调用.catch()
。
Promise
或 .then
中的 Error
将沿着 Promise
链传播,直到它遇到第一个处理程序,它可以是这两个中的一个:
.then(function(){}, function(err){}) // second callback is the handler
.catch(function(err){})
其中 .catch
选项实际上只是语法糖:
.then(null, function(err){})
在您的代码中,.then
不包含处理程序,因此 api
中的 Error
传播到 .catch
。
我试图了解以下场景中的承诺异常处理。第二个调试器语句首先停止,并记录错误。为什么是这样?我以为只有 'then' 块抛出错误才能进入异常块?
api.then(response => {
debugger; //1
dispatch(fetchReceive(response)); //never executes
})
.catch((err) => {
debugger; //2
console.error(err); //err.status = 404
});
我正在使用以下 npm 包:
"babel-cli": "6.14.0",
"babel-core": "6.9.1",
"babel-loader": "6.2.4",
"babel-plugin-transform-class-properties": "6.10.2",
"babel-plugin-transform-object-rest-spread": "6.8.0",
"babel-plugin-transform-react-constant-elements": "6.9.1",
"babel-plugin-transform-react-inline-elements": "6.8.0",
"babel-polyfill": "6.16.0",
"babel-preset-es2015": "6.9.0",
"babel-preset-es2017": "6.16.0",
"babel-preset-react": "6.5.0",
"babel-register": "6.9.0",
请记住,承诺不是行动,而是价值。 api
是某个调用的结果,该结果可能已经是一个错误。
const api = Promise.reject(new Error("I'm rejected!"));
api
.then(value => console.log("I'm resolved!", value))
.catch(err => console.error("I'm rejected!", err.message));
在这种情况下,.then()
将被跳过并调用.catch()
。
Promise
或 .then
中的 Error
将沿着 Promise
链传播,直到它遇到第一个处理程序,它可以是这两个中的一个:
.then(function(){}, function(err){}) // second callback is the handler
.catch(function(err){})
其中 .catch
选项实际上只是语法糖:
.then(null, function(err){})
在您的代码中,.then
不包含处理程序,因此 api
中的 Error
传播到 .catch
。