为什么我的承诺似乎阻止执行

时间:2017-06-05 13:45:37

标签: javascript promise

下面简化了我的代码,我基本上运行了一个函数,它在函数内部创建了一个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");

1 个答案:

答案 0 :(得分:4)

Promise不会将同步代码转换为异步代码。

如果传递给Promise的函数阻塞,那么承诺也会阻止。