2017-07-12 21 views
4

让我们举一个简单的例子,fs.stat。我可以promisify fs.stat和写:等待和异步当你不关心错误

const stats = await stat(file, fs.constants.R_OK); 

但如果该文件不存在则抛出。除了在try/catch中包装每一个等待,是否有一个干净的模式或包装库可以在这里使用?有些东西可能以stats === undefined | null结束?

+0

@hindmost - 这已经无关节点,我只是以节点为例 –

回答

3

也许是这样的?

function caughtAwait(func){ 
    try{ 
    return await func(); 
    } 
    catch(e){ 
    console.log(e); 
    return null; 
    } 
} 
const stats = caughtAwait(()=>stat(file, fs.constants.R_OK)); 
+0

是的,我正在考虑写一个像这样的简单的库,它也可以处理数组('Promise.all')和其他任何我能想到的东西。我主要是好奇,如果任何人已经完成了这一点,并认为通过各种案件 –

+0

我明白,虽然你想要什么似乎过于简单和直接使用外部库恕我直言。我在这里也有一个真正的机会。祝你好运 –

0

怎么样一个简单的包装:

async function leniently(promise) { 
    try { 
     return await promise 
    } catch(err) { 
     return null 
    } 
} 

用于任何承诺:

const result = await leniently(stat(file, fs.constants.R_OK)) 

或者Promise.all(...)

const result = await leniently(Promise.all(...))