我正在尝试ES6 Async / Await功能,使用async / await比使用Genrators和Promise更容易实现。
例如,当我们从getActiveSession
函数调用promise函数(async
中的catch
时) - 如果Promise失败,它将被捕获到 async function createSession(context) {
try {
let activeSession = await getActiveSession(context);
if (activeSession) {
return activeSession;
} else {
let session = await createNewSession(context);
return session;
}
} catch (createSessionException) {
throw createSessionException;
}
}
块中并被处理。
newSession
如果我需要继续而不打破程序流程怎么办?如果getActiveSession
失败,我需要创建一个getActiveSession
。
目前,如果No Session Found
承诺被拒绝且错误为createSession
,则同样的错误消息也会被投放到insert . . . select
。
答案 0 :(得分:0)
如果我需要继续而不打破程序流程怎么办?即如果getActiveSession失败,我需要创建一个newSession。
如果getActiveSession
失败(或返回null
),则创建一个新会话:
async function createSession(context) {
try {
let activeSession = await getActiveSession(context);
if (activeSession) {
return activeSession;
}
} catch (ex) { }
return await createNewSession(context);
}
答案 1 :(得分:-1)
在catch
块中添加所需的逻辑,而不是抛出错误。
您在catch块中重新抛出的错误实际上是您的async
函数拒绝而不是解析的原因。
async function foo() {
try {
throw new Error("let's go to the catch block")
} catch (e) {
return safelyCreateSession()
}
}
如果您仍想从函数中重新抛出,这意味着您需要在调用它的函数中处理它:
async function main() {
let result;
try {
result = await aFunctionThatThrows()
} catch (e) {
result = aFunctionThatDoesNotThrow()
}
// use result
}