javascript - 如何避免在 Firebase Cloud Functions 中嵌套承诺?
问题描述
我使用本教程作为学习 Dialogflow 和 Firebase 的主要方式,但我陷入了以下代码部分:
25 if(action === 'firebase.update'){
26 let userId = 'marc.tuinier';
27 // Check if the user is in our DB
28 admin.firestore().collection('users').where('userId', '==', userId).limit(1).get()
29 .then(snapshot => {
30 let user = snapshot.docs[0]
31 if (!user) {
32 // Add the user to DB
33 admin.firestore().collection('users').add({
34 userId: userId
35 }).then(ref => {
36 sendResponse('Added new user');
37 });
38 } else {
39 // User in DB
40 sendResponse('User already exists');
41 }
42 });
43 }
我收到这些错误:
28:9 error Expected catch() or return promise/catch-or-return
31:17 error Each then() should return a value or throw promise/always-return
33:21 error Expected catch() or return promise/catch-or-return
33:21 warning Avoid nesting promises promise/no-nesting
35:29 error Each then() should return a value or throw promise/always-return
我主要想知道如何修复这些错误(也许还有一些材料,以便我可以了解更多信息 - 在此先感谢!)
解决方案
因此,就避免嵌套的 Promise 而言,我建议您研究 async / await,为您留下如下内容。然后,您可以添加 try/catch 块以进一步调试
if(action === 'firebase.update'){
let userId = 'marc.tuinier';
// Check if the user is in our DB
let snapshot = await admin.firestore().collection('users').where('userId', '==', userId).limit(1).get()
let user = snapshot.docs[0]
if (!user) {
// Add the user to DB
await admin.firestore().collection('users').add({
userId: userId
})
return sendResponse('Added new user');
} else {
return sendResponse('User already exists');
}
}
推荐阅读
- reactjs - React 认为我的函数组件是一个对象(而不是函数)
- java - 无法使用 selenium BDD 框架运行登录测试
- reactjs - 如何避免在useEffect中didmount时调用清理函数?
- node.js - Firebase无密码登录电子邮件链接过期时间太短
- spring - 如何使用 Spring WebServiceTemplate 正确配置编组
- c - 如何在现代 linux 下编译 oneko 程序?
- android - Unity facebook sdk'没有找到类“com.facebook.FacebookContentProvider”'对此有任何更多建议吗?
- wpf - 从 WPF TextBox 中移除焦点会导致性能下降
- c - HTTP响应问题
- c# - c# 中的 powershell 交换命令 - 运行空间限制