下面简化了我的代码,我基本上运行了一个函数,它在函数内部创建了一个Promise并返回它。出于某种原因,使用console.time()进行测试,看起来代码实际上是阻塞的。 x.root函数大约需要200ms才能运行,两个console.time()测试都需要200ms。现在,如果我在setTimeout中完成了包装函数的古老技巧,问题就会消失,但我想知道我在这里做错了什么?
我真的更喜欢能够创建,解决和拒绝我的帮助函数中的promise,然后只需调用我的函数然后捕获而不必在早期级别创建Promise。这里的故障是什么?
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");
答案 0 :(得分:4)
Promise不会将同步代码转换为异步代码。
如果传递给Promise
的函数阻塞,那么承诺也会阻止。