index.ts 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { appConfig } from '../config/index'
  2. import { httpRequest } from './http/index'
  3. import socket from './socket/index'
  4. export default new (class {
  5. /** 服务配置信息 */
  6. config = {
  7. commSearchUrl: '',
  8. goCommonSearchUrl: '',
  9. hsbyBankSignZone: '',
  10. hsbyRegister: '',
  11. hsbyPayUrlWeb: '',
  12. hsbySignUp: '',
  13. mobileAuthUrl: '',
  14. mobileOpenUrl: '',
  15. newsUrl: '',
  16. openApiUrl: '',
  17. quoteHost: '',
  18. quotePort: '',
  19. quoteUrl: '',
  20. tradeHost: '',
  21. tradePort: '',
  22. tradeUrl: '',
  23. uploadUrl: '',
  24. oem: '',
  25. iOS: '',
  26. android: '',
  27. pcNewsUrl: '',
  28. pcMangerUrl: '',
  29. }
  30. /** 服务初始化状态 */
  31. isReady = false;
  32. /** 等待服务初始化 */
  33. private pending = true;
  34. /**
  35. * 尝试自动初始化,若断网或其它原因导致初始化失败,需手动初始化
  36. */
  37. private tryInit = this.init();
  38. /**
  39. * 初始化服务配置
  40. */
  41. private init(): Promise<void> {
  42. return new Promise((resolve, reject) => {
  43. // 获取服务接口地址
  44. httpRequest(appConfig.apiUrl, 'GET', {
  45. success: (res) => {
  46. console.log('服务配置信息', res.data);
  47. this.config = res.data as any;
  48. this.isReady = true;
  49. resolve();
  50. // 连接交易服务
  51. socket.connectTrade();
  52. },
  53. fail: () => {
  54. reject('获取服务配置地址失败');
  55. },
  56. complete: () => {
  57. this.pending = false;
  58. }
  59. })
  60. })
  61. }
  62. /**
  63. * 服务初始化完成时触发
  64. * @param callback
  65. */
  66. async onReady(callback?: () => void) {
  67. // 初始化失败时重新初始化
  68. if (!this.isReady && !this.pending) {
  69. this.tryInit = this.init();
  70. }
  71. // 确保当前只有一个初始化实例
  72. await this.tryInit.then(() => callback && callback());
  73. }
  74. })