javascript - 包含 for 循环的基于 Promise 的函数不异步运行

标签 javascript asynchronous promise es6-promise

我有以下代码:

function asyncLoop() {
    return new Promise(function(res, rej) {
        for(let i=0;i<=400000000;i++) {
            if(i===400000000) {console.log("done"); res();}
        }
    });
}

asyncLoop().then(()=>{console.log("then")});
console.log("out");

我得到以下输出:

done
out
then

根据我对 Promises 的理解,asyncLoop 应该异步运行,并且输出应该如下:

out
done
then

我错过了什么?

最佳答案

您的循环位于您传递给 new Promise 的回调内。该函数称为“执行器”:

function executor(resolve, reject)

执行器由new Promise同步调用。执行器的作用是设置任何异步事件,以便最终调用 resolvereject

请参阅 MDN:Promise constructor parameters

This function is invoked immediately with the resolving functions as its two arguments.

The constructor will not return until the executor has completed

关于javascript - 包含 for 循环的基于 Promise 的函数不异步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44201640/

相关文章:

javascript - 鼠标事件和 FPS

javascript - 如何从 json 对象数组中删除整个 json 对象并将其写入文件?

javascript - 如何从异步调用返回响应?

asynchronous - 如何限制 Perl 6 中 Proc::Async 产生的并发进程数?

javascript - 通过promise $q angularjs接收不完整的数据

javascript - JS - 按顺序链接异步方法,不带回调或修改

javascript - AngularJS - 你能在一个 javascript block 中引用一个转发器变量吗?

javascript - 使用 jQuery 填充带有选中复选框的值的跨度

javascript - 在函数内部调用函数,只有在函数结束后,其余的代码才会发生

javascript - Node.js Promises Q.all 不起作用