【发布时间】:2021-12-31 12:41:10
【问题描述】:
我使用 JSON 文件作为数据库,所以我需要在文件尚未完全更新时消除 read/write 错误。
如何从同一文件创建更新进程队列?
(我正在使用打字稿)
【问题讨论】:
标签: node.js json typescript
我使用 JSON 文件作为数据库,所以我需要在文件尚未完全更新时消除 read/write 错误。
如何从同一文件创建更新进程队列?
(我正在使用打字稿)
【问题讨论】:
标签: node.js json typescript
您可以使用bull,它是一个经过良好测试的第三方队列库。你可以使用 npm 安装它:
npm install bull --save
要添加类型运行这个:
npm install @types/bull --save-dev
您可以按照以下步骤操作:
const Queue = require('bull');
const videoQueue = new Queue('video transcoding', 'redis://127.0.0.1:6379');
const audioQueue = new Queue('audio transcoding', { redis: { port: 6379, host: '127.0.0.1', password: 'foobared' } }); // Specify Redis connection using object
const imageQueue = new Queue('image transcoding');
const pdfQueue = new Queue('pdf transcoding');
videoQueue.process(function (job, done) {
// job.data contains the custom data passed when the job was created
// job.id contains id of this job.
// transcode video asynchronously and report progress
job.progress(42);
// call done when finished
done();
// or give a error if error
done(new Error('error transcoding'));
// or pass it a result
done(null, { framerate: 29.5 /* etc... */ });
// If the job throws an unhandled exception it is also handled correctly
throw new Error('some unexpected error');
});
audioQueue.process(function (job, done) {
// transcode audio asynchronously and report progress
job.progress(42);
// call done when finished
done();
// or give a error if error
done(new Error('error transcoding'));
// or pass it a result
done(null, { samplerate: 48000 /* etc... */ });
// If the job throws an unhandled exception it is also handled correctly
throw new Error('some unexpected error');
});
imageQueue.process(function (job, done) {
// transcode image asynchronously and report progress
job.progress(42);
// call done when finished
done();
// or give a error if error
done(new Error('error transcoding'));
// or pass it a result
done(null, { width: 1280, height: 720 /* etc... */ });
// If the job throws an unhandled exception it is also handled correctly
throw new Error('some unexpected error');
});
pdfQueue.process(function (job) {
// Processors can also return promises instead of using the done callback
return pdfAsyncProcessor();
});
videoQueue.add({ video: 'http://example.com/video1.mov' });
audioQueue.add({ audio: 'http://example.com/audio1.mp3' });
imageQueue.add({ image: 'http://example.com/image1.tiff' });
你可以查看bull的文档来实现它。
注意:如果你不明白如何实现它,我建议你关注this链接。
【讨论】: