在理解Promise之前,我们需要理解什么时同步与异步。
转:https://segmentfault.com/a/1190000004322358
假设存在一个函数A:
A(args...);
同步:如果在函数A返回的时候,调用者就能够得到预期结果(即拿到了预期的返回值或者看到了预期的效果),那么这个函数就是同步的。
例如:
Math.sqr(2);
console.log('Hi');
第一个函数返回时,就拿到了预期的返回值:2的平方根
第二个函数返回时,就看到了预期的效果:在控制台打印一个字符串。
所以这两个函数都是同步的。
异步:如果在函数A返回的时候,调用者还不能够得到预期结果,而是需要在将来通过一定的手段得到,那么这个函数就是异步的。
例子:
在console中执行setTimeout(function(){console.log("10000")},10000);console.log(10);
执行结果:10 10000.
其中setTimeout(fn,100000)就是异步过程的发起函数,fn是回调函数。
用生活中的例子总结一个同步与异步就是:
在公路上,汽车一辆接一辆,有条不紊的运行。这时,有俩车坏掉了。假如它停在原地进行修理,那么后面的车就会被堵住没法行驶,交通就乱套了。幸好旁边有应急车道,
可以把故障车辆推到应急车道修理,而正常的车流不会受到任何影响。等车修好了,再从应急车道回到正常车道即可。唯一影响的就是,应急车道用多了,原来的车辆之间的顺序会有点乱。
这就是同步和异步的区别。同步可以保证顺序一致,但是容易导致阻塞;异步可以解决阻塞问题,但是会改变顺序性。改变顺序性其实也没有什么大不了的,只不过让程序变得稍微难理解了一些。
Promise是抽象异步处理对象以及对其进行各种操作的组件。
我们知道JavaScript是单线程执行的,由于这个缺陷,导致JavaScript的所有网络操作以及浏览器事件必须时异步