首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有求必应

有求必应
EN

Stack Overflow用户
提问于 2020-04-17 16:44:22
回答 1查看 188关注 0票数 0

我不知道在Firebase函数中如何在循环中实现承诺有什么问题。当将此函数作为Firebase调度函数运行时,我会得到这个错误:"TypeError: undefined不是一个函数“,它在我的index.js中指定了第202行(如下所示)。函数没有运行到完成(所有的.then都没有完成)。我还有另外两个问题:

  1. 表示我没有正确地使用Promise.all,也没有在正确的位置返回承诺。
  2. 我在Firebase日志中得到了这个错误:“documentPath参数值”不是一个有效的资源路径。路径必须是一个非空字符串。当试图在下面代码第2节中的路径中获取文档时。路径是正确的,并且确实是字符串,正如我通过检查引用对象所验证的那样。

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

代码语言:javascript
复制
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!');
            });
        });

为了提高可读性,我删除了.thencatch中的大部分逻辑。

编辑:

这个问题有助于理解这一切是如何工作的:Firebase (Angular) Promises with Loops in Loops,在研究了它之后,我想我正在做的事情和解释一样,但仍然失败。

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 20:42:47

结果,我在代码的其他地方调用了不正确的路径。我从数据库中得到一个值,然后使用它来调用另一个引用路径,但是这个值没有定义。修正后,我能够修正另一个承诺错误,遵循罗默-1888年的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61276572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档