Quiero generar preguntas y recibir respuestas como entrada en una terminal. Para cada pregunta, hay una verificación, en este caso, si se proporcionó la entrada o no. Si es así, se debe generar la siguiente pregunta; si no, la pregunta debe repetirse.
Si se proporciona entrada cada vez, se llama a resolve() y pasa a la siguiente pregunta, como debería. Pero el problema ocurre si la primera vez que se envía una entrada vacía. Se atasca un poco y resolve() ya no funciona
const rdline = readline.createInterface({ input: process.stdin, output: process.stdout }); let userName, userSurname = "";1ra pregunta
const question_name = () => { return new Promise((resolve) => { rdline.question("What's your name?\n", name => { if (name) { userName = name; resolve(); } else { question_name(); } }); }); };2da pregunta
const question_surname = () => { return new Promise((resolve) => { rdline.question("What's your surname?\n", surname => { if (surname) { userSurname = surname; resolve(); } else { question_surname(); } }); }); };llamar a las dos preguntas
const askUser = async () => { await question_name(); await question_surname(); console.log(`Hi, ${userName} ${userSurname}`); rdline.close(); }; askUser();Parece que no está resolviendo los datos y espera que el nombre de usuario y userSurname de askUser userName
En su lugar, resuelva las respuestas y las preguntas repetidas, y asígnelas dentro askUser :
// mock rdline const rdline = { question: (a,b) => a.match(/surname/) ? b('Test') : b('User'), close: () => {} }; const question_name = () => { return new Promise((resolve) => { rdline.question("What's your name?\n", name => { if (name) { resolve(name); } else { resolve(question_name()); } }); }); }; const question_surname = () => { return new Promise((resolve) => { rdline.question("What's your surname?\n", surname => { if (surname) { resolve(surname); } else { resolve(question_surname()); } }); }); }; const askUser = async () => { const userSurname = await question_name(); const userName = await question_surname(); console.log(`Hi, ${userName} ${userSurname}`); rdline.close(); }; askUser();Hay una función llamada resolver en js. Le sugiero que haga function questionname() {...} en lugar de llamar a una función de flecha. Además, use otro nombre en lugar de resolver.