Advertisement
Guest User

Untitled

a guest
Jul 26th, 2016
43
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1.  
  2. import fs = require('fs')
  3.  
  4. type NodeCallback<T> = (err:any, data:T) => void
  5.  
  6. /**
  7. * Accepts a function accepting a Node.js style callback, and calls it, returning a Promise
  8. */
  9. const promisify = <T>(func:(cb:NodeCallback<T>) => void) =>
  10. new Promise<T>((resolve, reject) => {
  11. func((err, data) => {
  12. if (err) {
  13. reject(err)
  14. } else {
  15. resolve(data)
  16. }
  17. })
  18. })
  19.  
  20. const promisify0 = <T>(func:(cb:NodeCallback<T>) => void) =>
  21. () => promisify<T>(cb => func(cb))
  22.  
  23. const promisify1 = <P1, T>(func:(p1:P1, cb:NodeCallback<T>) => void) =>
  24. (p1:P1) => promisify<T>(cb => func(p1, cb))
  25.  
  26. const promisify2 = <P1, P2, T>(func:(p1:P1, p2:P2, cb:NodeCallback<T>) => void) =>
  27. (p1:P1, p2:P2) => promisify<T>(cb => func(p1, p2, cb))
  28.  
  29. const promisify3 = <P1, P2, P3, T>(func:(p1:P1, p2:P2, p3:P3, cb:NodeCallback<T>) => void) =>
  30. (p1:P1, p2:P2, p3:P3) => promisify<T>(cb => func(p1, p2, p3, cb))
  31.  
  32. const promisify4 = <P1, P2, P3, P4, T>(func:(p1:P1, p2:P2, p3:P3, p4:P4, cb:NodeCallback<T>) => void) =>
  33. (p1:P1, p2:P2, p3:P3, p4:P4) => promisify<T>(cb => func(p1, p2, p3, p4, cb))
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43. async function test1():Promise<void> {
  44. let fd = await promisify<number>(cb => fs.open('foo.txt', 'w', 'mode', cb))
  45. // ...
  46. await promisify<void>(cb => fs.close(fd, cb))
  47. }
  48.  
  49. async function test2():Promise<void> {
  50. let fd = await promisify3(fs.open)('foo.txt', 'w', 'mode')
  51. // ...
  52. await promisify1(fs.close)(fd)
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement