Как во vue из функции вернуть значение

Не могу из функции вернуть значение, мне из функции showResults() , нужно вернуть число speedMbps и поместить его в переменную vue (this.speed)

  mounted() {
    var imageAddr = "http://www.kenrockwell.com/contax/images/g2/examples/31120037-5mb.jpg"; 
    var downloadSize = 24518; //bytes
    
    function InitiateSpeedDetection() {
      window.setTimeout(MeasureConnectionSpeed, 1);
    };

    if (window.addEventListener) {
      window.addEventListener('load', InitiateSpeedDetection, false);
    } else if (window.attachEvent) {
      window.attachEvent('onload', InitiateSpeedDetection);
    }
    function MeasureConnectionSpeed() {
      var startTime, endTime;
      var download = new Image();
      download.onload = function () {
        endTime = (new Date()).getTime();
        showResults();
      }
      startTime = (new Date()).getTime();
      var cacheBuster = "?nnn=" + startTime;
      download.src = imageAddr + cacheBuster;

      function showResults() {
        var duration = (endTime - startTime) / 1000;
        var bitsLoaded = downloadSize * 8;
        var speedBps = (bitsLoaded / duration).toFixed(2);
        var speedKbps = (speedBps / 1024).toFixed(2);
        var speedMbps = (speedKbps / 1024).toFixed(2);
        window.speed=speedMbps
      }
    }
    this.speed = window.speed
  },


Ответы (1 шт):

Автор решения: Виктор Карев

Проще всего так:

    mounted() {
        var self = this; // !!!!!
        var imageAddr = "http://www.kenrockwell.com/contax/images/g2/examples/31120037-5mb.jpg";
        var downloadSize = 24518; //bytes

        function InitiateSpeedDetection() {
            window.setTimeout(MeasureConnectionSpeed, 1);
        }
        ;

        if (window.addEventListener) {
            window.addEventListener('load', InitiateSpeedDetection, false);
        } else if (window.attachEvent) {
            window.attachEvent('onload', InitiateSpeedDetection);
        }
        function MeasureConnectionSpeed() {
            var startTime, endTime;
            var download = new Image();
            download.onload = function () {
                endTime = (new Date()).getTime();
                showResults();
            }
            startTime = (new Date()).getTime();
            var cacheBuster = "?nnn=" + startTime;
            download.src = imageAddr + cacheBuster;

            function showResults() {
                var duration = (endTime - startTime) / 1000;
                var bitsLoaded = downloadSize * 8;
                var speedBps = (bitsLoaded / duration).toFixed(2);
                var speedKbps = (speedBps / 1024).toFixed(2);
                var speedMbps = (speedKbps / 1024).toFixed(2);
                self.speed = speedMbps; // !!!
            }
        }
    }
→ Ссылка