javascript - 如何创建从 Firebase 读取数据然后在 twilio 上发送消息的计划函数
问题描述
我正在尝试从我的数据库中读取数据,然后通过 Twilio 发送消息。我期望这个函数做的是每分钟检查一次数据库。它将检查玩家集合中的所有文档。如果其中一个文档中的会话字段等于 0,则它会创建一条消息并将其发送到同一文档中的电话号码。
这是我当前的代码:
const account = '***********************************';
const auth = '********************************';
const client = require('twilio')(account,auth);
const firebaseFunc = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const database = admin.firestore()
exports.paymentChecker = firebaseFunc.pubsub.schedule('* * * * *').onRun((context) => {
database.collection('Players').get()
.then(querySnapshot => {
querySnapshot.forEach(doc => {
if(doc.data().sessions, '==', 0){
client.messages.create({
to: doc.data().phone,
from: '+***********',
body: 'Hi' + doc.data().First + ', you have to renew your registration',
})
}
})
}).catch()
})
但是,此代码不会部署到 firebase,因为它会产生许多错误。
19:5 error Expected catch() or return promise/catch-or-return
20:11 error Each then() should return a value or throw promise/always-return
22:16 error Unexpected constant condition no-constant-condition
如何解决这个问题?谢谢
解决方案
问题在于您没有返回异步方法(get()
和client.messages.create()
)返回的 Promises。除了它生成的代码错误之外,有关它的重要性的更多详细信息,请参阅文档。
所以下面应该做的伎俩(未经测试):
exports.paymentChecker = firebaseFunc.pubsub.schedule('* * * * *').onRun((context) => {
return database.collection('Players').get()
.then(querySnapshot => {
const promises = [];
querySnapshot.forEach(doc => {
if (doc.data().sessions == 0) {
promises.push(
client.messages.create({
to: doc.data().phone,
from: '+***********',
body: 'Hi' + doc.data().First + ', you have to renew your registration',
})
);
}
})
return Promise.all(promises);
}).catch(error => {
console.log(error);
return null;
})
});
另请注意,if(doc.data().sessions, '==', 0)
无法正常工作。与其他错误一样,您可以通过注意相应错误行开头提到的行号来检测它:) 22:16 error Unexpected constant condition no-constant-condition
。
推荐阅读
- javascript - 使用javascript返回一个三角形的整数,其行数等于给定的整数
- c# - 缩放画布 InkStrokes
- hyperledger-composer - 在超级账本作曲家 0.19.3 客户端中无法接收事件
- vb.net - 如何在不指定路径的情况下转到文件夹
- html - 如何继续绝对定位的列背景
- xamarin - 如何使用pdfjs xamarin表单从url显示pdf
- python - Python dict如何在一行中创建密钥或更新密钥?
- google-cloud-platform - GCP 服务帐号令牌过期
- asp.net - 如何手动编辑 Web 部署包?
- mongodb - Azure VM 上的 MongoDB 连接错误网络无法访问