promise是ES6新增的语法,他的出现极大地改善了异步编程中“回调地狱”的情况,promise究竟有什么用呢?在踩了很多坑之后,我总结出了一套自己对于promise的理解,本文争取用一段最简单的代码,让新手秒懂promise的用法,老鸟轻拍!
我现在声明一个a,并且要延时1秒钟后给他赋值为10,然后打印这个a:
var a;
setTimeout(function (){
a = 10;
},1000);//1000ms后给a赋值为10
console.log(a)//undefined,
很显然,a是undefined,因为js是非阻塞的,它不会等你定时器里的东西走完了,再执行打印a这个操作。
它不等你读完,就会迫不及待地去打印a,因为a要1秒后才能被赋值,所以此时a就像一个早产儿一样,只是个undefined。
那怎么办?很简单,把【打印a】这个操作也放进延时定时器里嘛:
setTimeout(function (){
a = 10;
console.log(a);//成功打印为10
},1000);
我想上一个例子并不难理解,那么接下来我会试图将其功能进行拓展,【打印a】这个需求我并不需要,我想要用a做其他事情,比如让他乘以2并输出返回结果,或者其他的涉及到a的操作。那很简单,我将console.log(a)这段代码删去,封装成一个函数,并将其作为参数传进这个定时器里,也就是所谓的“回调函数”如下:
var a;
function foo(callBack){
setTimeout(function (){
a = 10;
callBack&&callBack()
},1000)
}
foo(functi