Javascript 如何创建从Firebase读取数据然后在twilio上发送消息的计划函数
我正在尝试从数据库中读取数据,然后通过Twilio发送消息。 我希望这个函数能做的是每分钟检查一次数据库。它将检查玩家集合中的所有文档。如果其中一个文档中的sessions字段等于0,则会创建一条消息并将其发送到同一文档中的电话号码 这是我目前的代码:Javascript 如何创建从Firebase读取数据然后在twilio上发送消息的计划函数,javascript,firebase,google-cloud-functions,twilio,Javascript,Firebase,Google Cloud Functions,Twilio,我正在尝试从数据库中读取数据,然后通过Twilio发送消息。 我希望这个函数能做的是每分钟检查一次数据库。它将检查玩家集合中的所有文档。如果其中一个文档中的sessions字段等于0,则会创建一条消息并将其发送到同一文档中的电话号码 这是我目前的代码: const account = '***********************************'; const auth = '********************************'; const client = requ
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()
)返回的承诺。有关它的重要性以及它生成的代码错误的更多详细信息,请参阅
因此,以下几点应该可以做到(未经测试):
还要注意,
if(doc.data().sessions,'=',0)
无法工作。与其他错误一样,您可以通过注意相应错误行开头提到的行号来检测到它:22:16错误意外常量条件no constant condition
)。通过查看您共享的错误,它似乎与承诺返回有关。承诺只是一项可能尚未完成的任务。你可以查看这篇博客文章[1],它用例子解释了承诺。我希望这将有助于解决这个问题
[1] 我建议在谷歌上搜索每一个错误,了解它们的含义。一旦你理解了他们的意思,你就可以采取措施纠正任何可能的错误。@kerimErkan嗨,你有时间看一下建议的答案吗?谢谢
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;
})
});