Non sono sicuro di poterti dire: "si, è corretto", perché ho l'impressione che ancora qualcosa ti sfugga.
Forse vedere tutti i possibili passaggi commentati in un codice che simula il tuo ti potrebbe essere d'aiuto:
Qui puoi vederlo in azione.
	codice:
	<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<select id="Version" onchange="change()">
        <option value="0">0</option>
        <option value="1">1</option>
        <option value="2">2</option>
    </select>
    <div id="log"></div>
    [inizio tag script]
        //select per scegliere la "versione"
        var myselect = document.getElementById("Version");
        //div per scrivere ciò che accade
        var log = document.getElementById("log");
        //versione
        var version = 0;
        //location (???)
        var aLocation = "ABCD";
        //oggetto per creare una simulazione del tuo codice
        var aService = {};
        //funzione per rilevare la scelta della versione ed avviare il codice
        function change() { 
            //recupero la scelta e la converto da testo a numerico
            version = parseInt(myselect.options[myselect.selectedIndex].value);
            //avvio il codice
            login(aLocation);
        }
        //funzione login che restituisce una Promise ed accetta in ingresso la versione
        aService.login = (version) => {
            //la Promise in ingresso accetta due parametri che saranno le funzioni che passi al "then", quindi quella anonima 
            //che contiene il parametro che hai nominato come "result" e una che scrive in caso non sia andata a buon fine la chiamata: ((reason) => log.innerHTML =" ERRORE: "+reason)
            return new Promise((resolve, reject) => {
                //simulazione
                if (version < 1) {
                    //non va a buon fine e quindi viene chiamato (reason) => log.innerHTML =" ERRORE: "+reason
                    reject("versione minima 1, ko");
                }
                if (version === 1) {
                    //dopo 5 secondi viene passata una stringa, questo sarà il valore che prenderà il parametro "result" della funzione anonima
                    setTimeout(()=> resolve("Consigliato upgrade, ok"),5000);
                }
                else if (version > 1) {
                    //dopo 2 secondi viene passata una stringa, questo sarà il valore che prenderà il parametro "result" della funzione anonima
                    setTimeout(() => resolve("ok"), 2000);
                }
            });
        }
        //funzione di avvio
        function login(aLocation) {
            //scrivo nel div "log"
            log.innerHTML = "Login in corso, attendere";
            //chiamo il login passando la versione, e nel then passo il valore restituito di start (quindi la funzione anonima con il result)
            //più una funzione in caso di errore, il cui parametro (reason) prenderà il valore passato nel reject della Promise
            aService.login(version).then(start(aLocation), (reason) => log.innerHTML =" ERRORE: "+reason);
        }
        // funzione chiamata dalla precedente
        function start(aLocation, disableWS) {
            return function (response) {        //da dove salta fuori response?
                log.innerHTML = response;
            };
        }
    [fine tag script]
</body>
</html>
 
@vincent, mi blocca se posto il codice qui.