Bonjour,

J'ai le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
function searchPubKeyOnServer(){
 
    // Une fonction qui me sert à faire des requetes AJAX
    var makeRequest = function (callback,request) {
        // Variable que j'aimerais retourner
        var result = null;
        xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 ){
                if (xhr.status == 200 || xhr.status == 0) {
                    if(!xhr.responseText){
                        writeInConsole("****Erreur : responseText est vide.");
                    }
                    else{
                        // Appel à la fonction callback. Sa valeur de retour est sensée être affectée à result                       
                        result = callback(xhr.responseText);
                        ;
                    }
                }
            }
        };
        xhr.open("GET",request,true);
        xhr.send(null);
        return result
    }
 
    var extractKeyId = function (htmlString){
        if( /(0x[a-z0-9]{16})/i.test(htmlString)){
            writeInConsole("Key ID found : "+RegExp.$1);
            return RegExp.$1;
        }
        else{
            writeInConsole("No Key ID found");
        }
    }
 
    var request = 'http://keyserver.gingerbear.net/pks/lookup?search=john.smith%40example.com&fingerprint=on&op=index';
 
    // Ici je m'attends à ce que ma fonction makeRequest me renvoit le keyID, mais keyID est null, car la fonction de callback se termine après que makeRequest ne se termine...
    var keyID = makeRequest(extractKeyId,request);
 
    // Suite...
}
Mon problème c'est que la fonction makeRequest se termine avant la fonction callback. Du coup la valeur qu'elle retourne est null...

J'ai trouvé un sujet qui m'a l'air similaire ici mais je n'ai pas compris la solution donnée...