docs: function getUserInfoRecursive(callback) {
                  getUserInfoRetryCount++;
  
                  if (getUserInfoRetryCount > getUserInfoRetry) {
                      getUserInfoTimeout && clearTimeout(getUserInfoTimeout);
  
                      getUserInfoRetryCount = 0;
  
                      fireEvent('error', {
                          code: 6101,
                          message: CHAT_ERRORS[6101],
                          error: null
                      });
                  }
                  else {
                      getUserInfoTimeout && clearTimeout(getUserInfoTimeout);
  
                      getUserInfoTimeout = setTimeout(function() {
                          getUserInfoRecursive(callback);
                      }, getUserInfoRetryCount * 10000);
  
                      return sendMessage({
                          chatMessageVOType: chatMessageVOTypes.USER_INFO,
                          typeCode: params.typeCode
                      }, {
                          onResult: function(result) {
                              var returnData = {
                                  hasError: result.hasError,
                                  cache: false,
                                  errorMessage: result.errorMessage,
                                  errorCode: result.errorCode
                              };
  
                              if (!returnData.hasError) {
                                  getUserInfoTimeout && clearTimeout(getUserInfoTimeout);
  
                                  var messageContent = result.result;
                                  var currentUser = formatDataToMakeUser(messageContent);
  
                                  /**
                                   * Add current user into cache database #cache
                                   */
                                  if (canUseCache) {
                                      if (db) {
                                          db.users
                                              .where('id')
                                              .equals(currentUser.id)
                                              .toArray()
                                              .then(function(users) {
                                                  if (users.length > 0 && users[0].id > 0) {
                                                      db.users
                                                          .update(currentUser.id, {
                                                              cellphoneNumber: currentUser.cellphoneNumber,
                                                              email: currentUser.email,
                                                              image: currentUser.image,
                                                              name: currentUser.name
                                                          })
                                                          .catch(function(error) {
                                                              fireEvent('error', {
                                                                  code: error.code,
                                                                  message: error.message,
                                                                  error: error
                                                              });
                                                          });
                                                  }
                                                  else {
                                                      db.users.put(currentUser)
                                                          .catch(function(error) {
                                                              fireEvent('error', {
                                                                  code: error.code,
                                                                  message: error.message,
                                                                  error: error
                                                              });
                                                          });
                                                  }
                                              });
                                      }
                                      else {
                                          fireEvent('error', {
                                              code: 6601,
                                              message: CHAT_ERRORS[6601],
                                              error: null
                                          });
                                      }
                                  }
  
                                  resultData = {
                                      user: currentUser
                                  };
  
                                  returnData.result = resultData;
                                  getUserInfoRetryCount = 0;
  
                                  callback && callback(returnData);
  
                                  /**
                                   * Delete callback so if server pushes response
                                   * before cache, cache won't send data again
                                   */
                                  callback = undefined;
                              }
                          }
                      });
                  }
              }