[英]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.