gpt4 book ai didi

javascript - 将 forEach 与内部事件同步(Firebase 和 Node 6.11.5)

转载 作者:行者123 更新时间:2023-11-30 19:54:43 25 4
gpt4 key购买 nike

我正在逐位读取一个目录中的所有 PNG 文件,我必须在 json 中总结一些数据。问题是,如果我理解的话,PNG 阅读器会在完成后发送一个“已解析”的异步事件。这导致函数在填充 json 之前退出...

我使用的是 Node 6.11.5,所以我无法使用同步/等待。

var fs = require('fs'),
PNG = require('pngjs').PNG;

exports.movie = functions.https.onRequest((req, res) => {
console.log('********** START FUNCTION ************');

var movieFolder = 1;
if (req.query.id) movieFolder = '../movies/' + req.query.id + '/png/';

var exitJson = [];

fs.readdir(movieFolder, (err, files) => {
files.forEach((file) => {
fs.createReadStream(movieFolder + file)
.pipe(new PNG({
filterType: 1
}))
.on('parsed', function () {
console.log('Parsing: ' + movieFolder + file);
exitJson.push({
width: this.width,
height: this.height,
data: []
});
});
});
});
console.log('************* FINISHED *************');
res.status(200).json(exitJson);
});

最佳答案

您可以使用一个简单的 itemsProcessed 计数器来检测是否所有的回调都已解析。

var movieFolder = 1;
if (req.query.id) movieFolder = '../movies/' + req.query.id + '/png/';

var exitJson = [];

var itemsProcessed = 0;

fs.readdir(movieFolder, (err, files) => {
files.forEach((file) => {
fs.createReadStream(movieFolder + file)
.pipe(new PNG({
filterType: 1
}))
.on('parsed', function () {
console.log('Parsing: ' + movieFolder + file);
exitJson.push({
width: this.width,
height: this.height,
data: []
});
itemsProcessed++;
if (itemsProcessed === files.length) {
console.log('************* FINISHED *************');
res.status(200).json(exitJson);
}
});
});
});

关于javascript - 将 forEach 与内部事件同步(Firebase 和 Node 6.11.5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54128159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com