如何防止 NodeJS 中的异步 - 在开始任务 b 之前等待任务 a 完成
how to prevent Async in NodeJS - wait for task a to complete before starting task b
我需要等待任务 A 完成才能执行任务 B 代码。
任务 A 是转换音频文件
任务 B 使用转换后的音频进行进一步处理。
因为任务 A 将新的音频文件存储到特定目录,而任务 B 正在尝试访问不存在的文件,我的代码中断了。
如何确保任务 B 代码在新音频文件保存到目录后执行?
代码
var track = fileURL;//your path to source file
ffmpeg(track)
.toFormat('flac')
.on('error', function (err) {
console.log('An error occurred: ' + err.message);
})
.on('progress', function (progress) {
// console.log(JSON.stringify(progress));
console.log('Processing: ' + progress.targetSize + ' KB converted');
})
.on('end', function () {
console.log('Processing finished !');
})
.save(path.join(__dirname, '/public/downloads/Test.flac'));//path where you want to save your file
以上代码部分从上传文件夹中获取文件,将其转换为新的文件格式并将其保存到下载目录中。
您可以在下面看到我正在尝试访问下载文件夹中的文件 (Test.flac)
。还有很多代码,但我只需要在完成上述任务后才执行此代码块。
const Speech = require('@google-cloud/speech');
const projectId = 'uliq-68823';
// Instantiates a client
const speechClient = Speech({
projectId: projectId
});
// The name of the audio file to transcribe
const fileName2 = path.join(__dirname, '/public/downloads/' + 'Test.flac');
// Reads a local audio file and converts it to base64
const file2 = fs.readFileSync(fileName2);
const audioBytes = file2.toString('base64');
使用用于序列化函数的异步瀑布包,以便第二个函数在第一个函数之后 运行
这里是 link package link
fluent-ffmpeg
库使用流来处理您的文件。因此,如果您想在流完成后执行代码,请在对流的 'end'
事件调用的回调中调用您的代码。
示例:
var track = fileURL;//your path to source file
ffmpeg(track)
.toFormat('flac')
.on('error', function (err) {
console.log('An error occurred: ' + err.message);
})
.on('progress', function (progress) {
// console.log(JSON.stringify(progress));
console.log('Processing: ' + progress.targetSize + ' KB converted');
})
.on('end', function () {
console.log('Processing finished !');
// USE THE FILE HERE
// <----------------
})
.save(path.join(__dirname, '/public/downloads/Test.flac'));
我需要等待任务 A 完成才能执行任务 B 代码。
任务 A 是转换音频文件
任务 B 使用转换后的音频进行进一步处理。
因为任务 A 将新的音频文件存储到特定目录,而任务 B 正在尝试访问不存在的文件,我的代码中断了。
如何确保任务 B 代码在新音频文件保存到目录后执行?
代码
var track = fileURL;//your path to source file
ffmpeg(track)
.toFormat('flac')
.on('error', function (err) {
console.log('An error occurred: ' + err.message);
})
.on('progress', function (progress) {
// console.log(JSON.stringify(progress));
console.log('Processing: ' + progress.targetSize + ' KB converted');
})
.on('end', function () {
console.log('Processing finished !');
})
.save(path.join(__dirname, '/public/downloads/Test.flac'));//path where you want to save your file
以上代码部分从上传文件夹中获取文件,将其转换为新的文件格式并将其保存到下载目录中。
您可以在下面看到我正在尝试访问下载文件夹中的文件 (Test.flac)
。还有很多代码,但我只需要在完成上述任务后才执行此代码块。
const Speech = require('@google-cloud/speech');
const projectId = 'uliq-68823';
// Instantiates a client
const speechClient = Speech({
projectId: projectId
});
// The name of the audio file to transcribe
const fileName2 = path.join(__dirname, '/public/downloads/' + 'Test.flac');
// Reads a local audio file and converts it to base64
const file2 = fs.readFileSync(fileName2);
const audioBytes = file2.toString('base64');
使用用于序列化函数的异步瀑布包,以便第二个函数在第一个函数之后 运行 这里是 link package link
fluent-ffmpeg
库使用流来处理您的文件。因此,如果您想在流完成后执行代码,请在对流的 'end'
事件调用的回调中调用您的代码。
示例:
var track = fileURL;//your path to source file
ffmpeg(track)
.toFormat('flac')
.on('error', function (err) {
console.log('An error occurred: ' + err.message);
})
.on('progress', function (progress) {
// console.log(JSON.stringify(progress));
console.log('Processing: ' + progress.targetSize + ' KB converted');
})
.on('end', function () {
console.log('Processing finished !');
// USE THE FILE HERE
// <----------------
})
.save(path.join(__dirname, '/public/downloads/Test.flac'));