gpt4 book ai didi

javascript - Firebase 函数如何正确处理错误

转载 作者:行者123 更新时间:2023-12-02 21:45:53 25 4
gpt4 key购买 nike

注意:这个问题主要是关于错误处理,如果这是一个好的方法,而不是关于嵌套 promise ,请在关闭之前阅读

由于目前 Firestore 和 Firebase 数据库等服务没有错误代码,因此我正在使用一个系统来了解功能失败的位置并相应地处理错误,简化版本如下:

exports.doStuff = functions.https.onCall((data, context) => {

return [promise doing stuff goes here].catch(error => { throw new Error('ERROR0') })
.then(result => {
return [promise doing stuff goes here, needs result of previous promise]
.catch(error => { throw new Error('ERROR1') })
})
.then(result => {
return [promise doing stuff goes here, needs result of previous promise]
.catch(error => { throw new Error('ERROR2') })
})
.then(result => {
//inform client function successful
return {
success: true
}
})
.catch(error => {
if (error !== null) {
switch (error.message) {
case 'ERROR0':
//do stuff
throw new functions.https.HttpsError('unknown', 'ERROR0');
case 'ERROR1':
//do stuff
throw new functions.https.HttpsError('unknown', 'ERROR1');
case 'ERROR2':
//do stuff
throw new functions.https.HttpsError('unknown', 'ERROR2');
default:
console.error('uncaught error: ', error);
throw error;
}
}
});
});

问题是,对于每个 .catch()在每个返回的 promise 中,我收到以下警告:warning Avoid nesting promises

所以我的问题是,有没有更好的方法来处理错误?

最佳答案

最终,这是一种风格建议,以防止出现奇怪且难以识别的错误。大多数时候重写可以消除警告。例如,您可以将代码重写如下,同时保留相同的功能。

exports.doStuff = functions.https.onCall(async (data, context) => {

const result1 = await [promise doing stuff goes here]
.catch(error => {
throw new functions.https.HttpsError('unknown', 'ERROR0', { message: error.message } )
});

const result2 = await [promise based on result1 goes here]
.catch(error => {
throw new functions.https.HttpsError('unknown', 'ERROR1', { message: error.message } )
});

const result3 = await [promise based on result1/result2 goes here]
.catch(error => {
throw new functions.https.HttpsError('unknown', 'ERROR2', { message: error.message } )
});

return {
success: true
};
});

最后,您可以使用 several possible values for the first argument 之一,而不是到处使用 unknown同时传递您需要的任何支持信息作为第三个参数(如上面所示,我传递了原始错误消息)。

关于javascript - Firebase 函数如何正确处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60251996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com