নোডজেএস-এ সমস্যা সমাধানের চেষ্টা করার সময় আমি এই পৃষ্ঠাটি জুড়ে হোঁচট খেয়েছি: ফাইল খণ্ডগুলি পুনরায় অপ্রয়োজনীয়। মূলত: আমার কাছে ফাইলের একটি অ্যারে রয়েছে। একটি বড় ফাইল তৈরি করার জন্য আমাকে সঠিক ক্রমে এই সমস্ত ফাইল যুক্ত করতে হবে। আমাকে অবশ্যই এটি অবিচ্ছিন্নভাবে করতে হবে।
নোডের 'fs' মডিউলটি অ্যাপেন্ডফাইসাইক সরবরাহ করে তবে আমি এই অপারেশনের সময় সার্ভারটি ব্লক করতে চাইনি। আমি fs.promises মডিউলটি ব্যবহার করতে এবং এই জিনিসগুলি একসাথে শৃঙ্খলে নেওয়ার একটি উপায় খুঁজে পেতে চেয়েছিলাম। এই পৃষ্ঠার উদাহরণগুলি আমার পক্ষে বেশ কার্যকর হয়নি কারণ আমার আসলে দুটি অপারেশন প্রয়োজন: fsPromises.read () ফাইল খণ্ডে পড়ার জন্য এবং fsPromises.appendFile () গন্তব্য ফাইলটিতে কনক্যাট করার জন্য। আমি জাভাস্ক্রিপ্টের সাথে আরও ভাল থাকলে আমি আগের উত্তরগুলি আমার পক্ষে কাজ করতে পারতাম। ;-)
আমি এইজন্য হোঁচট খেয়েছি ...
https://css-tricks.com/why-using-reduce-to-sequentially-resolve-promises-works/
using-reduce-to-sequentially-resolve-promises- ... এবং আমি একসাথে একটি কার্যক্ষম সমাধান হ্যাক করতে সক্ষম হয়েছি।
TLDR:
/**
* sequentially append a list of files into a specified destination file
*/
exports.append_files = function (destinationFile, arrayOfFilenames) {
return arrayOfFilenames.reduce((previousPromise, currentFile) => {
return previousPromise.then(() => {
return fsPromises.readFile(currentFile).then(fileContents => {
return fsPromises.appendFile(destinationFile, fileContents);
});
});
}, Promise.resolve());
};
এবং এটির জন্য এখানে জুঁই ইউনিট পরীক্ষা:
const fsPromises = require('fs').promises;
const fsUtils = require( ... );
const TEMPDIR = 'temp';
describe("test append_files", function() {
it('append_files should work', async function(done) {
try {
// setup: create some files
await fsPromises.mkdir(TEMPDIR);
await fsPromises.writeFile(path.join(TEMPDIR, '1'), 'one');
await fsPromises.writeFile(path.join(TEMPDIR, '2'), 'two');
await fsPromises.writeFile(path.join(TEMPDIR, '3'), 'three');
await fsPromises.writeFile(path.join(TEMPDIR, '4'), 'four');
await fsPromises.writeFile(path.join(TEMPDIR, '5'), 'five');
const filenameArray = [];
for (var i=1; i < 6; i++) {
filenameArray.push(path.join(TEMPDIR, i.toString()));
}
const DESTFILE = path.join(TEMPDIR, 'final');
await fsUtils.append_files(DESTFILE, filenameArray);
// confirm "final" file exists
const fsStat = await fsPromises.stat(DESTFILE);
expect(fsStat.isFile()).toBeTruthy();
// confirm content of the "final" file
const expectedContent = new Buffer('onetwothreefourfive', 'utf8');
var fileContents = await fsPromises.readFile(DESTFILE);
expect(fileContents).toEqual(expectedContent);
done();
}
catch (err) {
fail(err);
}
finally {
}
});
});
আমি আশা করি এটি কাউকে সাহায্য করবে