readline是node内置库

源码 —以后记得看

image.png

  1. function stepRead(callback) {
  2. let line = ''
  3. const input = process.stdin
  4. const output = process.stdout
  5. function onKeyPress(s) {
  6. output.write(s)
  7. line += s
  8. switch (s) {
  9. case '\r': //enter键
  10. callback(line)
  11. input.pause()
  12. }
  13. }
  14. emitKeyPressEvents(input)
  15. input.on('keypress', onKeyPress)
  16. input.setRawMode(true)
  17. input.resume()
  18. }
  19. function emitKeyPressEvents(stream) {
  20. function onData(chunk) {
  21. g.next(chunk.toString())
  22. }
  23. const g = emitKeys(stream)
  24. g.next()
  25. //传入data方法
  26. stream.on('data', onData)
  27. }
  28. function* emitKeys(stream) {
  29. while (true) {
  30. let ch = yield
  31. stream.emit('keypress', ch)
  32. }
  33. }
  34. stepRead(function (e) {
  35. console.log('anser', e)
  36. })