什么是异步?什么是同步?

在代码的执行过程中,可能会涉及到两个不同的概念,他们就是同步与异步。

同步是指当发起一个请求时,如果未得到请求结果,代码将会等待,直到结果出来为止才会执行之后的代码。 异步是指当发起一个请求时,不会等待请求结果,直接继续执行后面的代码。

我们可以用一个两人问答的场景来比喻异步与同步。 A向B问了一个问题之后,然后就笑呵呵的等着B回答,B回答了之后他才会接着问下一个问题,这是同步。 A向B问了一个问题之后,不等待B的回答,接着问下一个问题,这是异步。

在JavaScript中,也可以用代码来表示他们之间的区别。

首先使用Promise模拟一个发起请求的函数,该函数执行后,将会1s之后返回数值30。

function fn() {
    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            resolve(30);
        }, 1000);
    })
}

那么在该函数的基础上,我们可以使用async/await语法来模拟同步的效果。

var foo = async function() {
    var t = await fn();
    console.log(t);
    console.log('next code');
}

foo();

输出结果为

// 1s之后依次输出
30
next code

而异步效果则会有不同的输出结果。

var foo = function() {
    fn().then(function(resp) {
        console.log(resp);
    });
    console.log('next code');
}

输出结果

next code
// 停顿1s后继续输出
30

我们将在后面的章节中分别学习Promiseasync/await的具体作用与使用方法。

results matching ""

    No results matching ""