什么是异步?什么是同步?
在代码的执行过程中,可能会涉及到两个不同的概念,他们就是同步与异步。
同步是指当发起一个请求时,如果未得到请求结果,代码将会等待,直到结果出来为止才会执行之后的代码。 异步是指当发起一个请求时,不会等待请求结果,直接继续执行后面的代码。
我们可以用一个两人问答的场景来比喻异步与同步。 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
我们将在后面的章节中分别学习Promise
与async/await
的具体作用与使用方法。