البرمجة

كيفية انتظار انتهاء تدفق البيانات في Node.js

لفهم كيفية الانتظار حتى ينتهي تدفق البيانات (stream) في Node.js، يمكنك استخدام ميزة التحكم بالتدفق (stream control) التي توفرها مكتبة Node.js. في حالتك، تحتاج إلى ضمان أن عمليتي الكتابة إلى الملف واستخراج النص من الملف تكتملان قبل المتابعة إلى الدورة القادمة من حلقة الـ for. يمكن القيام بذلك عن طريق استخدام مكتبة async في Node.js، التي توفر وظيفة eachSeries التي تنفذ الوعود بترتيب متسلسل.

اليك كيفية تعديل الكود لينتظر حتى ينتهي تدفق البيانات ويتم استخراج النص قبل المتابعة:

javascript
let promises = []; promises.push(promise1); promises.push(promise2); promises.push(promise3); Promise.all(promises).then((responses) => { async.eachSeries(responses, (response, callback) => { if (response.property === something) { //do something callback(); // تستمر إلى الوعد التالي مباشرة } else { let file = fs.createWriteStream('./hello.pdf'); let stream = response.pipe(file); stream.on('finish', () => { extract(filePath, {splitPages: false}, (err, text) => { if (err) { console.log(err); } else { arrayOfDocuments[i].text_contents = text; callback(); // تستمر إلى الوعد التالي بعد استخراج النص من الملف } }); }); } }, () => { // عندما تنتهي من استخراج النصوص من جميع الملفات // يمكنك القيام بأي شيء آخر هنا بعد اكتمال جميع الوعود }); });

هذا الكود يضمن تنفيذ عملية الكتابة إلى الملف واستخراج النص من الملف بشكل متسلسل، حيث ينتظر حتى اكتمال الوعد الحالي قبل بدء الوعد التالي في حلقة الـ for.

المزيد من المعلومات

، (callback) => {
if (response.property === something) {
//do something
callback(); // تابع للانتقال إلى التالي
} else {
let file = fs.createWriteStream(‘./hello.pdf’);
let stream = response.pipe(file);

scss
stream.on('finish', () => { extract(filePath, {splitPages: false}, (err, text) => { if (err) { console.log(err); callback(err); // تابع مع خطأ إذا حدث } else { // تخزين النص في مصفوفة الوثائق arrayOfDocuments[i].text_contents = text; callback(); // انتهى بنجاح، يمكن المتابعة إلى التالي } }); }); }

}, (err) => {
if (err) {
console.log(err);
} else {
// تمت المعالجة بنجاح
}
});
});

go
تم استخدام دالة `eachSeries` لتنفيذ الوعود بشكل متسلسل، مما يضمن أن عمليات الكتابة إلى الملف واستخراج النص تنتهيان قبل المتابعة إلى التدفق القادم.

زر الذهاب إلى الأعلى