javascript - Læs en enkelt linje brugerinput i Bun.js
Bun.js har et flot indbygget API til at læse periodisk brugerinput:
const prompt = "Type something: ";
process.stdout.write(prompt);
for await (const line of console) {
console.log(`You typed: ${line}`);
process.stdout.write(prompt);
}
Men...
Jeg vil læse brugerinput, uden for en løkke!
Jeg fandt denne løsning:
const stdinIterator = process.stdin.iterator()
console.write('What is your first name?\n> ')
const firstName = (await stdinIterator.next()).value.toString().trimEnd()
console.log('Hello,', firstName)
console.write('What is your last name?\n> ')
const lastName = (await stdinIterator.next()).value.toString().trimEnd()
console.log('Welcome', `${firstName} ${lastName}`)
Det virker. Men så bliver processen ikke afsluttet automatisk (jeg skal trykke på Ctrl+C manuelt).
Svar #1
Bun.js har implementeret prompt-API'en.
Brug det og nyd:
const firstName = prompt('What is your first name?')
console.log('Hello,', firstName)
const lastName = prompt('What is your last name?')
console.log('Welcome', `${firstName} ${lastName}`)
Se: https://bun.sh/docs/api/globals
Svar #2
Fra en kommentar, der blev lagt af aboqasem den 31-03-2024, er det muligt at lukke iteratoren ved at påkalde return()-metoden:
const iterator = console[Symbol.asyncIterator]();
const text = (await iterator.next()).value;
await iterator.return?.();
Jeg har med succes brugt dette i mit projekt, der kører Bun v1.1.17.
Og fordi strømmen er lukket, tillader det processen at afslutte normalt uden at skulle ctrl+c for at afslutte den.
