簡體   English   中英

如何通過帶有firebase功能的FTP下載文件?

[英]How to download a file through FTP with a firebase function?

題:

不幸的是,我的函數在幾秒鍾內完成執行,而不是完全執行。 這顯然是因為監聽器被聲明為流式傳輸數據:據我所知,它們不是我可以等待的承諾。

如何讓我的 firebase 功能完全執行?


代碼:

exports.fifteenMinutesData = functions
.runWith(runtimeOpts)
.pubsub
.schedule('*/15 * * * *')
.timeZone('Etc/UTC')
.onRun((context) => {
    return (async() => {
        try {

            const Client = require('ftp');
            const c = new Client();
            
            c.connect({
                host: "...",
                user: "..."
            });
            
            c.on('ready', async function () {
                c.get('text.txt', async function (err, stream) {
                    if (err)
                        throw err;
                    var content = '';
                    stream.on('data', function (chunk) {
                        content += chunk.toString();
                    });
                    stream.on('end', function () {
                        (async () => {

                            try {
                                let data = content;

                                //etc....
                            }
                            catch(err) {
                                console.log("ERR: "+err);
                            }
                        })()
                    })
                })
            })
        }
        catch(err) {
            console.log("ERR: "+err)
        }
    })()
});

您需要承諾結果,以便模塊知道該值是異步的。 目前,您的回調未通知模塊任何內容,因此執行會立即退出,您將需要類似的格式

exports.fifteenMinutesData = functions
.runWith(runtimeOpts)
.pubsub
.schedule('*/15 * * * *')
.timeZone('Etc/UTC')
.onRun((context) => new Promise((resolve, reject) => 
{

});

你在哪里調用resolve(data); 對於成功路徑和reject(err); 對於所有錯誤執行路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM