2017-06-05 8 views
0

Unten ist eine Vereinfachung meines Codes, ich führe grundlegend eine Funktion, die ein Versprechen innerhalb der Funktion erstellt und es zurückgibt. Aus irgendeinem Grund, mit console.time() testen, scheint es, dass der Code tatsächlich blockiert. Die x.root-Funktion benötigt ungefähr 200ms, um ausgeführt zu werden, und beide console.time() -Tests ergeben ziemlich viele 200ms. Wenn ich nun den uralten Trick, die Funktion in setTimeout zu verpacken, mache, verschwindet das Problem, aber ich würde gerne wissen, was ich hier falsch mache?Warum scheint mein Versprechen die Ausführung zu blockieren?

Ich würde wirklich gerne in der Lage sein, die Versprechen in meiner Hilfsfunktion zu erstellen, zu lösen und abzulehnen und dann nur meine Funktion gefolgt von dann und fangen, ohne Versprechen auf einer früheren Ebene zu erstellen. Was ist die Fehlfunktion hier?

parseroot = function(params) { 
    return new Promise(function(resolve, reject) { 
     try { 
      var parsed_html = x.root(params); 
      x.replacecontents(params.target, parsed_html); 
      resolve(true); 
     } 
     catch(e) { 
      reject(e); 
     } 
    }); 
} 


console.time("Test 1"); 
console.time("Test 2"); 
var el = document.querySelector("#custom-element"); 
el.parseroot({ 
    section:"list", 
    target: "#list-container", 
}).then(function(response) { 
    console.info("searchresult > list() success"); 
    console.timeEnd("Test 2"); 
}); 
console.timeEnd("Test 1"); 
+1

Ihr Code ist * blockiert *? var parse_html = x.root (params); das Umwickeln mit einem Timeout ist der richtige Weg ... –

+0

Versprechen machen den Code nicht parallel oder so. Wenn Sie das Ergebnis einer blockierenden Aktion in eine Zusage einschließen, handelt es sich immer noch um eine blockierende Aktion. – Bergi

Antwort

4

Versprechen machen synchronen Code nicht zu asynchronem Code.

Wenn die Funktion, die Sie an Promise übergeben, blockiert, wird das Versprechen auch blockieren.

+0

Danke, ich hatte falsch angenommen. Ich dachte, dass das Innere eines Versprechens asynchron ausgeführt wird und das zurückgegebene Objekt auf das Auflösen/Zurückweisen wartet, während alles andere parallel läuft. – red

Verwandte Themen