我不知道在Firebase函数中如何在循环中实现承诺有什么问题。当将此函数作为Firebase调度函数运行时,我会得到这个错误:"TypeError: undefined不是一个函数“,它在我的index.js中指定了第202行(如下所示)。函数没有运行到完成(所有的.then都没有完成)。我还有另外两个问题:
checkForTweetsToDelete:函数(Db){/ 1。获取第一个排序规则: streamersRef = db.collection(' streamers ');streamersQuery = streamersRef.get() .then(streamersSnap => { var答应= [];/ 2。获取每个流的设置--这里有一个“参数值”documentPath不是有效的资源路径。路径必须是非空字符串。“db.collection('streamers').doc((streamerDoc.id.toString())).collection('TweetSettings').doc('Settings');streamersSnap.forEach(streamerDoc => ){ let tweetSettingsRef =tweetSettingsRef设settingsDoc = tweetSettingsRef.get() .then(doc => {/ 3 )。设tweetsQuery =tweetsRef.where(‘删除’,‘=’‘,'no').get() .then(tweetsSnap => { var tweetPromises =[]);tweetsSnap.forEach(tweetDoc => {/ 4 )。删除tweetDoc客户端=新Twitter({子域:"api“),// "api“是默认(其他子域的更改)版本:"1.1",//版本"1.1”是默认(其他子域的更改) consumer_key: APP_KEY,//源于Twitter。consumer_secret: APP_SECRET,//来自Twitter。access_token_key: USER_TOKEN,//来自您的用户(oauth_token) access_token_secret:机密//来自您的用户(oauth_token_secret) });const =client.post(状态/破坏“,{ id: tweetDoc.id,trim_user: 1 }) .then(twitterResponse => {/ 5。请写信给DB,说明它已被删除。设tweetRef = tweetsRef.doc(tweetDoc.id.toString());updatedDoc = tweetRef.set({ deleted:'yes‘},{merge: true}).then(() => {true;});返回Promise.all(updatedDoc);// 5/};// 4/tweetPromises.push(用户););返回Promise.all(tweetPromises);});返回Promise.all(tweetsQuery);// 3/};promises.push(settingsDoc);};返回Promise.all(承诺);// 2/};返回Promise.all(streamersQuery);// 1/
还有我的index.js
exports.scheduledFunction = functions.pubsub.schedule('every 1 minutes').onRun((context) => {
console.log('This will run every 1 minutes!');
var scheduled = require('./scheduledFunctions');
if (admin.apps.length === 0 ) { admin.initializeApp(functions.config().firebase); }
var db = admin.firestore();
//scheduled.checkForTweetsToDelete(db);
//return scheduled.checkForTweetsToDelete(db);
return Promise.all( scheduled.checkForTweetsToDelete(db) ).then(function() { // Line 202
console.log('Finished all promises!');
});
});为了提高可读性,我删除了.then和catch中的大部分逻辑。
编辑:
这个问题有助于理解这一切是如何工作的:Firebase (Angular) Promises with Loops in Loops,在研究了它之后,我想我正在做的事情和解释一样,但仍然失败。
发布于 2020-04-28 20:42:47
结果,我在代码的其他地方调用了不正确的路径。我从数据库中得到一个值,然后使用它来调用另一个引用路径,但是这个值没有定义。修正后,我能够修正另一个承诺错误,遵循罗默-1888年的建议。
https://stackoverflow.com/questions/61276572
复制相似问题