在了解Promise之前,我们来看一段代码
js
复制代码
function foo(){ setTimeout(()=>{ console.log('1') },1000) } function bar(){ console.log('2') } foo() bar
看完这段代码之后,按照传统的,代码从上往下执行,很多人会以为先打印出1,然后再打印出2,但是事实真是这样吗?
事实上,结果恰恰相反,事实上,结果是先打印2,后打印1
我们要知道,js,是单线程执行的,当在调用一个需要过一段时间才执行(像定时器,ajax)的函数时, 会先挂在那里不执行,先执行不耗时间的函数。
上面那段代码,实际上,时先调用bar(),然后再调用foo(),所以是先打印2,后打印1
那么,有没有一种办法,先执行foo(),后执行bar()呢?
答案是肯定的,下面我们来介绍一下Promise
Promise简单介绍
Promise是一个构造函数,用来生成Promise实例。实例代表一个异步操作的最终完成(或失败)及其结果值。
- Promise有三种状态:
Resolved(已完成) :成功状态,表示操作成功完成。
Rejected(已失败) :失败状态,表示操作失败。
Pending(等待中) :初始状态,既没有被成功(resolved)也没有被拒绝(rejected)。
那么,怎么用Promise来解决上面那个问题呢?
再这里,我们用到的是return new Promise((resolve, reject) => { ... })
return new Promise((resolve, reject) => { ... })
是JavaScript用来启动一个异步任务并处理其结果的方式。
-
Promise
是一个容器,它会容纳未来可能产生的结果(成功或失败)。 -
当你创建一个
Promise
,你需要给它一个函数(我们称之为 executor 函数),这个函数有两个参数:resolve
是一个函数,当你想说“任务成功了,这里是结果”时,就调用它。