У меня есть две функции, которые могут принимать входные данные из CLI, используя process.stdin. Когда одна из функций завершена, принимая входные данные, аналогичная такая функция вызывается, но когда управление смещается к вызываемой функции, вызывающая функция все еще передается и выполняется, что порождает противоречивые результаты.Как полностью сместить управление выполнением от одной интерактивной функции к другой в nodejs
var ar = [];
var a = 0;
test();
function test2(){
console.log("TEst 2");
process.stdin.setEncoding('utf8');
process.stdin.resume();
process.stdin.on('data',function(b){
if(ar.length < a)
{
ar.push(b.replace("\n",""));
}
else
{
test3();
}
});
}
function test3()
{
for(var t in ar)
{
console.log("ar["+t+"]: " + ar[t]);
}
process.exit();
}
function test()
{
process.stdin.setEncoding('utf8');
process.stdin.resume();
process.stdin.on('data',function(dat)
{
dat = dat.replace("\n","");
if(isNaN(dat))
{
console.log("This is an invalid number");
}
else
{
a = parseInt(dat);
console.log("calling test2");
test2();
}
});
}
test()
test2()
вызывает. Каждый раз, когда данные принимаются в test2()
, эти данные проверяются на isNaN
в test()
и производят console.log("This is an invalid number");
для любого нечислового ввода, который является допустимыми данными. Пожалуйста, найдите результат ниже.
deepakbilikere:~/workspace $ node goodnumber.js
2
calling test2
TEst 2
a
This is an invalid number
b
This is an invalid number
c
This is an invalid number
ar[0]: a
ar[1]: b
Я хотел бы выполнить эту часть логики без использования каких-либо внешних пакетов. Может кто-то, пожалуйста, помогите мне в понимании потока кода, а также улучшите код?
спасибо @pspi. Поток, похоже, ведет себя хорошо. Меня беспокоит то, почему поток 'test()' все еще передавался, когда 'test2()' уже был вызван. Ваш ответ затронул мою озабоченность. Однако моя основная цель состояла в том, чтобы достичь этого [вопроса] (http://stackoverflow.com/questions/38892588/synchronous-code-execution-in-nodejs-with-the-reuse-of-a-function-accepting-inpu). Так как у меня не было никакого решения, я ответил на метод выше. – DeepakBilikere