同步和异步

一、同步和异步

1、同步
同步是一条直线上的队列,调用者和被调用者串行执行,同步需要等待返回结果才能继续。

一个任务连续执行。

2、异步
异步不是一条直线上的队列,各走各的。调用者与被调用者并行执行,异步不必等待,一般需要监听异步的结果。

一个任务不是连续完成的,可以理解成该任务被人为分成两段,先执行第一段,然后转而执行其他任务,等做好了准备,再回过头执行第二段。

二、同步调用,异步调用,回调

同步调用是一种阻塞式调用,必须等待上一个任务完成,这样容易浪费系统资源;
异步调用是一种类似消息或事件的机制,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方;
var pf = function (num) {
    console.log('print: ',num);
};
pf(1111);
setTimeout(function () {
    pf(2222);
}, 2000);
pf(3333);
// -----结果-----
// print:  1111
// print:  3333
// print:  2222
回调是一种双向调用,被调用方在接口被调用时也会调用对方的接口。在等待某一件事情完成之后,再运行一个函数,回调可以弥补异步函数的缺点,能够让异步函数同步执行
var data = [];
setTimeout(function (){
    data.push(1);
},2000);
console.log(data[0]);
// 结果
// undefined
var data = [];
var cb = function(){
    console.log(data[0]);
};
var pushData =  function(callback){
    data.push(1);
    callback();
};
setTimeout(function () {
    pushData(cb);
},2000);
原文地址:https://www.cnblogs.com/camille666/p/sys_ays.html