utils.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. 'use strict';
  2. const PromiseInspection = require('./PromiseInspection').PromiseInspection;
  3. function defer() {
  4. let resolve = null;
  5. let reject = null;
  6. const promise = new Promise((resolver, rejecter) => {
  7. resolve = resolver;
  8. reject = rejecter;
  9. });
  10. return {
  11. promise,
  12. resolve,
  13. reject
  14. };
  15. }
  16. function now() {
  17. return Date.now();
  18. }
  19. function duration(t1, t2) {
  20. return Math.abs(t2 - t1);
  21. }
  22. function checkOptionalTime(time) {
  23. if (typeof time === 'undefined') {
  24. return true;
  25. } else {
  26. return checkRequiredTime(time);
  27. }
  28. }
  29. function checkRequiredTime(time) {
  30. return typeof time === 'number' && time === Math.round(time) && time > 0;
  31. }
  32. function delay(millis) {
  33. return new Promise(resolve => setTimeout(resolve, millis));
  34. }
  35. function reflect(promise) {
  36. return promise
  37. .then(value => {
  38. return new PromiseInspection({ value });
  39. })
  40. .catch(error => {
  41. return new PromiseInspection({ error });
  42. });
  43. }
  44. function tryPromise(cb) {
  45. try {
  46. const result = cb();
  47. return Promise.resolve(result);
  48. } catch (err) {
  49. return Promise.reject(err);
  50. }
  51. }
  52. module.exports = {
  53. now,
  54. defer,
  55. delay,
  56. reflect,
  57. duration,
  58. tryPromise,
  59. checkOptionalTime,
  60. checkRequiredTime
  61. };