默认情况下,node.js是异步的吗?

时间:2020-05-24 15:52:19

标签: javascript node.js asynchronous es6-promise event-loop

我非常熟悉node.js,从2年开始就使用JS。但是我仍然对节点的异步特性感到困惑。看一下下面的代码

// Synchronous Code:

function foo() {
    const result1 = bar();
    console.log(result1);

    const result2 = see();
    console.log(result2);
}
function bar() {
    return 'bar';
}
function see() {
    return 'see'
}
foo();
// Result:
// bar
// see
// Asynchronous - I know async keyword returns a promise so i am resolving it
async function foo() {
    const result1 = await bar();
    console.log(result1);

    const result2 = await see();
    console.log(result2);
}
async function bar() {
    return 'bar';
}
async function see() {
    return 'see'
}
foo();
// Result:
// bar
// see

我看到两种情况的执行情况相似,我是否丢失了任何东西,或者异步功能是否在事件循环中排队?

1 个答案:

答案 0 :(得分:0)

如果调用异步函数以与同步函数相同的顺序解析可用数据,则无法测试这些函数的异步性,则需要使用setTimeout函数。

但是,要回答您的问题,JavaScript本质上是异步的,否则浏览器中的阻止脚本将阻止所有内容。

默认情况下,JavaScript任务是在单个进程中按顺序执行的函数。无论是否使用异步,单击按钮之类的功能都会馈送到事件循环。在这种协作式多任务处理方式中,我们不希望一个任务在等待来自服务器的结果时阻止其他任务执行。

演示中的问题是异步功能的结果,这些功能现已可用。没有延迟。您可以使用setTimeout将结果延迟到以后的时间,以便观察效果。时间到了,提供给setTimeout函数的回调将添加到事件队列中。