什么是异步?什么是同步?在代码中我们经常会涉及到两个不同的概念,她们就是同步与异步.
同步:是指发起一个请求时, 如果未得到请求结果,代码将会一直等待,直到结果出来,才会执行后面的代码.
异步:是指当发起一个请求时,不会等待请求结果,而是直接继续执行后面的代码.
我们可以用一个双人问答的场景来比喻异步与同步,A向B问了一个问题之后,然后就笑呵呵的等待B的回答,B回答之后A才会接着问下一个问题,这是同步,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