রিডলাইন অবরোধযুক্ত আচরণ অবরুদ্ধ করা হচ্ছে
কনসোল থেকে আপনার কাছে তিনটি প্রশ্নের জবাব দেওয়ার কথা কল্পনা করুন, আপনি এখন জানেন যে এই কোডটি চলবে না কারণ পাঠ্যরেখার স্ট্যান্ডার্ড মডিউলটি 'আনব্লকড' আচরণ বলেছে যে প্রতিটি rl.question একটি স্বাধীন থ্রেড তাই এই কোডটি চলবে না।
'use strict';
var questionaire=[['First Question: ',''],['Second Question: ',''],['Third Question: ','']];
function askaquestion(question) {
const readline = require('readline');
const rl = readline.createInterface(
{input: process.stdin, output:process.stdout}
);
rl.question(question[0], function(answer) {
console.log(answer);
question[1] = answer;
rl.close();
});
};
var i=0;
for (i=0; i < questionaire.length; i++) {
askaquestion(questionaire[i]);
}
console.log('Results:',questionaire );
চলমান আউটপুট:
node test.js
Third Question: Results: [ [ 'First Question: ', '' ],
[ 'Second Question: ', '' ],
[ 'Third Question: ', '' ] ] <--- the last question remain unoverwritten and then the final line of the program is shown as the threads were running waiting for answers (see below)
aaa <--- I responded with a single 'a' that was sweeped by 3 running threads
a <--- Response of one thread
a <--- Response of another thread
a <--- Response of another thread (there is no order on threads exit)
প্রস্তাবিত সমাধানটি একটি আনব্লকিং থ্রেডের সমাপ্তির সংকেত দিতে ইভেন্ট ইমিটার ব্যবহার করে এবং এতে লুপ লজিক এবং প্রোগ্রামটির শেষ অংশটি তার শ্রোতার ফাংশনে অন্তর্ভুক্ত করে।
'use strict';
var questionaire=[['First Question: ',''],['Second Question: ',''],['Third Question: ','']];
// Introduce EventEmitter object
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {};
const myEmitter = new MyEmitter();
myEmitter.on('continue', () => {
console.log('continue...');
i++; if (i< questionaire.length) askaquestion(questionaire[i],myEmitter); // add here relevant loop logic
else console.log('end of loop!\nResults:',questionaire );
});
//
function askaquestion(p_question,p_my_Emitter) { // add a parameter to include my_Emitter
const readline = require('readline');
const rl = readline.createInterface(
{input: process.stdin, output:process.stdout}
);
rl.question(p_question[0], function(answer) {
console.log(answer);
p_question[1] = answer;
rl.close();
myEmitter.emit('continue'); // Emit 'continue' event after the question was responded (detect end of unblocking thread)
});
};
/*var i=0;
for (i=0; i < questionaire.length; i++) {
askaquestion(questionaire[i],myEmitter);
}*/
var i=0;
askaquestion(questionaire[0],myEmitter); // entry point to the blocking loop
// console.log('Results:',questionaire ) <- moved to the truly end of the program
চলমান আউটপুট:
node test2.js
First Question: 1
1
continue...
Second Question: 2
2
continue...
Third Question: 3
3
continue...
done!
Results: [ [ 'First Question: ', '1' ],
[ 'Second Question: ', '2' ],
[ 'Third Question: ', '3' ] ]
rl
আপনার দ্বারা পাঠ্যরেখা বোঝাচ্ছি ?