下面是我的代碼的簡化,我basicly運行的函數,該函數內部創建了一個承諾並返回它。由於某些原因,使用console.time()進行測試,看起來代碼實際上是阻塞的。 x.root函數需要大約200ms才能運行,並且兩個console.time()測試都能提供大約200ms的時間。現在,如果我沒有在包裝的setTimeout的功能多歲的老把戲,問題消失了,但我想知道我在做什麼錯在這裏?爲什麼我的諾言似乎阻止執行
我真的很喜歡能夠創建,解決和拒絕我的輔助函數內的承諾,然後就打電話,然後再和catch我的功能,而無需在較早的級別創建的承諾。這裏有什麼故障?
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");
你的代碼是*封鎖*? var parse_html = x.root(params);包裝在超時纔是正道...... –
承諾不使代碼並行或東西執行。如果將封鎖動作的結果封裝在承諾中,它仍然是阻止動作。 – Bergi