如何使用 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);