Javascript Firebase异步调度程序问题
我对firebase和异步javascript都是新手。我正试图在firebase中创建一个计划任务,从一个集合中获取一组rss URL,对其进行解析并将其存储在另一个集合中,但我遇到了错误:4 DEADLINE_Excepended:DEADLINE Excepended at Object.callErrorFromStatus在执行时Javascript Firebase异步调度程序问题,javascript,firebase,async-await,google-cloud-functions,Javascript,Firebase,Async Await,Google Cloud Functions,我对firebase和异步javascript都是新手。我正试图在firebase中创建一个计划任务,从一个集合中获取一组rss URL,对其进行解析并将其存储在另一个集合中,但我遇到了错误:4 DEADLINE_Excepended:DEADLINE Excepended at Object.callErrorFromStatus在执行时 const refreshRSS = functions.pubsub.schedule('every 30 mins').onRun(async cont
const refreshRSS = functions.pubsub.schedule('every 30 mins').onRun(async context => {
let newRSS = addRSS();
return await newPodcasts;
});
addRSS = async () => {
const newRSSFeed = new Array();
let rssURLs = await db.collection('rssURLs').get();
rssURLs.forEach(async rssURLsObject=>{
rss = rssURLsObject.data();
let rssData = await parser.parseURL(rss.url);
newRSSFeed.push(db.collection('rss').doc(encodeURIComponent(rss.url))
.set(podcast));
})
return newRSSFeeds;
}
我还尝试返回refreshRSS中的Promise.all(newRSS),但它抛出了另一个错误,声明:is not iterable。
我不确定firebase的返回参数究竟是什么。当您必须在循环中解析promise时,请尝试使用map。这将有助于:
const refreshRSS=functions.pubsub.schedule('every 30 min').onRun(异步上下文=>{
让newRSS=等待addRSS();
返回等待新播客;
});
addRSS=async()=>{
const newRSSFeed=新数组();
让rssURLs=wait db.collection('rssURLs').get();
让promise=rssURLs.map(异步rssURLsObject=>{
rss=rssURLsObject.data();
让rssData=wait parser.parseURL(rss.url);
让con=await db.collection('rss').doc(encodeURIComponent(rss.url)
newRSSFeed.push(con)
.set(podcast));
})
等待承诺。全部(承诺)
返回新的rssfeeds;
}
当您必须在循环中解析承诺时,请尝试使用map。这将有助于:
const refreshRSS=functions.pubsub.schedule('every 30 min').onRun(异步上下文=>{
让newRSS=等待addRSS();
返回等待新播客;
});
addRSS=async()=>{
const newRSSFeed=新数组();
让rssURLs=wait db.collection('rssURLs').get();
让promise=rssURLs.map(异步rssURLsObject=>{
rss=rssURLsObject.data();
让rssData=wait parser.parseURL(rss.url);
让con=await db.collection('rss').doc(encodeURIComponent(rss.url)
newRSSFeed.push(con)
.set(podcast));
})
等待承诺。全部(承诺)
返回新的rssfeeds;
}
我无法使用map对firebase提供的数据进行迭代。获取以下错误:TypeError:rssURLs.map不是函数rssURLs不是数组?我的错,get()方法返回快照对象。要获取数组,我需要使用.docs。但即使这样做了,我仍然会得到超时,错误如下:错误:请求在超时时在60000ms后超时。setTimeout(/workspace/node_modules/rss parser/lib/parser.js:101:23)同样是我的错,在函数中我解析了newRSSFeeds而不是promise。现在开始工作了!我无法使用map对firebase提供的数据进行迭代。获取以下错误:TypeError:rssURLs.map不是函数rssURLs不是数组?我的错,get()方法返回快照对象。要获取数组,我需要使用.docs。但即使这样做了,我仍然会得到超时,错误如下:错误:请求在超时时在60000ms后超时。setTimeout(/workspace/node_modules/rss parser/lib/parser.js:101:23)同样是我的错,在函数中我解析了newRSSFeeds而不是promise。现在开始工作了!