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.