【发布时间】:2018-05-29 15:05:07
【问题描述】:
我最近从promises 搬到了async/await。但是,我不确定try...catch 正确的流程。我有以下示例:
const rp = require('request-promise');
const func2 = async () => {
const response1 = await rp('http://nodejs.org/dist/index.json');
if (response1) {
return await rp('http://headers.jsontest.com'); // #opt 1: return a value
// return rp('http://headers.jsontest.com'); // #opt 2: return a promise:
}
}
(func1 = async () => {
try {
const response = await func2();
console.log('Success!');
} catch(e) {
console.log('Failed!');
}
})();
我想知道是否应该将try...catch 添加到func2,但我得出的结论是它已经在func1 的try...catch 中处理。
此代码有效吗?
【问题讨论】:
-
是的,它是有效的,但这是一个高度自以为是和上下文相关的问题。这还取决于您希望在
func2看到哪些异常以及您希望如何对它们做出反应。例如,您可能希望立即处理func2中的异常,以便您可以重试/恢复并仍然向调用者返回有效响应。 -
你能遇到
response1是“假”但没有抛出错误的情况吗?因为在那种情况下response将是undefined- 这有效吗?
标签: javascript node.js asynchronous async-await ecmascript-2017