Promise.k 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. promise {
  2. function delayed_value (x: Any, error: Bool) -> Promise {
  3. return create_promise << lambda(resolve, reject) {
  4. let e = custom_error('rejected')
  5. set_timeout(50) -> subscribe -> lambda {
  6. if error {
  7. reject(e)
  8. } else {
  9. resolve(x)
  10. }
  11. }
  12. }
  13. }
  14. await x = create_promise << lambda(resolve, reject) {
  15. delayed_value(1, false) -> then -> lambda(x) {
  16. return delayed_value(2+x, false)
  17. } -> then -> lambda(x) {
  18. assert x == 3
  19. return delayed_value(0, true)
  20. } -> catch -> lambda(error) {
  21. resolve(5)
  22. }
  23. }
  24. await y = create_promise << lambda(resolve, reject) {
  25. delayed_value(7, false) -> finally -> lambda(value) {
  26. resolve(value)
  27. }
  28. }
  29. await z = create_promise << lambda(resolve, reject) {
  30. delayed_value(0, true) -> finally -> lambda(error) {
  31. assert error is Error
  32. resolve(11)
  33. }
  34. }
  35. assert x*y*z == 5*7*11
  36. }