2017-01-03 69 views
1

我只是在节点中寻找异步/等待,看起来如果你在等待一个承诺,它会被抛弃。我想知道是否有更清晰的模式,而不是回到尝试/ catch块,我不知道?node async/await - 我需要try/catch吗?

async function foo() { 
    const val = await Promise.reject(); 
} 
+0

看来这是它的方式是正确的W上。 –

+0

你能详细说明你认为“更清洁”吗? – jib

+0

@jib - try/catch不是干净的控制结构。被拒绝的承诺并不总是意味着一个错误,并且在一个层次上的错误并不总是在较高层次上构成错误(例如,如果您无法访问文件,'fs.access'会抛出,但这是适当的方式来检查_if_你有权访问)。 'try/catch'的意思是_unexpected_错误,不是预期的错误。 –

回答

1

try/catch()吸尘器图案,对齐的同步和异步错误处理:

(工程在铬和Firefox开发版此刻)

function a(heads) { 
 
    if (heads) throw new Error("Synchronous error"); 
 
} 
 

 
async function b() { 
 
    await Promise.resolve(); 
 
    throw new Error("Asynchronous error"); 
 
} 
 

 
async function main(heads) { 
 
    try { 
 
    a(heads); 
 
    await b(); 
 
    } catch (e) { 
 
    console.log(e.message); 
 
    } 
 
} 
 
main(false); // Synchronous error 
 
main(true); // Asynchronous error