【问题标题】:Firebase async scheduler issueFirebase 异步调度程序问题
【发布时间】:2020-11-22 02:42:02
【问题描述】:

我是 firebase 和异步 javascript 的新手。我正在尝试在 firebase 中创建一个计划任务,以从集合中获取一堆 rss URL,对其进行解析并将其存储在另一个集合中,但我收到错误:4 DEADLINE_EXCEEDED:在 Object.callErrorFromStatus 执行时超出了截止日期。

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) 但它抛出另一个错误说明:不可迭代。 我不确定 firebase 期望的返回参数到底是什么。

【问题讨论】:

    标签: javascript firebase async-await google-cloud-functions


    【解决方案1】:

    当你必须在循环中解决promise时,尝试使用map。这将起作用:

    const refreshRSS = functions.pubsub.schedule('every 30 mins').onRun(async context => {
        let newRSS = await addRSS();
        return await newPodcasts;
    });
    
    addRSS = async () => {
        const newRSSFeed = new Array();
        let rssURLs = await db.collection('rssURLs').get();
        let promise = rssURLs.map(async rssURLsObject=>{
            rss = rssURLsObject.data();
            let rssData = await parser.parseURL(rss.url);  
            let con = await db.collection('rss').doc(encodeURIComponent(rss.url)
            newRSSFeed.push(con)
            .set(podcast));
    
        })
        await Promise.all(promise)
        return newRSSFeeds;
    }

    【讨论】:

    • 我无法使用 map 来遍历 firebase 提供的数据。收到以下错误:TypeError: rssURLs.map is not a function
    • rssURLs 不是数组?
    • 我的错,get() 方法返回一个快照对象。要获取数组,我需要使用 .docs。但即使这样做后我仍然超时,以下是错误:错误:请求在 Timeout.setTimeout 60000 毫秒后超时(/workspace/node_modules/rss-parser/lib/parser.js:101:23)
    • 又是我的错,在函数中我解决了 newRSSFeeds 而不是 promise。它现在正在工作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2022-10-14
    • 2021-11-24
    • 1970-01-01
    相关资源
    最近更新 更多