Kernel-Promises.st 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. Smalltalk createPackage: 'Kernel-Promises'!
  2. Object subclass: #Thenable
  3. instanceVariableNames: ''
  4. package: 'Kernel-Promises'!
  5. !Thenable commentStamp!
  6. I am the abstract base class for Promises.
  7. My subclasses should wrap existing JS implementations.
  8. I contain methods that wrap Promises/A+ `.then` behaviour.!
  9. !Thenable methodsFor: 'promises'!
  10. all: nadicBlock
  11. <return self.then(function (array) {
  12. return nadicBlock._valueWithPossibleArguments_(array);
  13. })>
  14. !
  15. catch: aBlock
  16. <return self.then(null, function (err) {
  17. return aBlock._value_(err);
  18. })>
  19. !
  20. on: aClass do: aBlock
  21. <return self.then(null, function (err) {
  22. if (err._isKindOf_(aClass)) return aBlock._value_(err);
  23. else throw err;
  24. })>
  25. !
  26. on: aClass do: aBlock catch: anotherBlock
  27. <return self.then(null, function (err) {
  28. try { if (err._isKindOf_(aClass)) return aBlock._value_(err); } catch (e) { err = e; }
  29. return anotherBlock._value_(err);
  30. })>
  31. !
  32. then: aBlock
  33. <return self.then(function (result) {
  34. return aBlock._value_(result);
  35. })>
  36. ! !