*前言:
过去初学JavaScript的时候,令人难以琢磨的就是函数了,在某些方面对函数对象的应用,确实给code 编写中带来了很多方便之处。
JavaScript语言的执行环境是“单线程”的,试想,如果在JavaScript中没有异步操作,我们根本就不能使用它了。而这其中 回调函数 ,就是早期用它来解决异步操作问题的最初方法。
回调函数的用法广泛,比如在某段代码中插入回调函数,意味着将之前的打包好的“代码块”在某处再执行一次,上述中,也阐述了回调函数能解决异步编程的问题。但当回调函数嵌套过多导致回调函数累积,我们的代码维护起来就会极其的复杂,多层回调函数的嵌套使我们的代码就偏离了“高内聚,低耦合”的设计理念,牵一发而动全身。
将多层回调函数的嵌套,我们称之为:回调地狱。
当回调函数层层嵌套过多时,将不再使用回调函数解决异步操作问题,将使用Promise。
在ES6语言标准规定中,Promise是一个对象,代表着一个异步操作,它可以获取异步操作的消息,进而改变Promise自身的状态。Promise这个对象有三种状态:
1.等待pending 2.已失败reject 3.已成功fulfill。
有了Promise对象,我们就可以将异步操作以同步的方式表达出来。*
##基本用法:
```//ES6中规定,Promise对象是一个构造函数,用来生成Promise实例。
let promise = new Promise(function(resolve,reject) {
创建Promise对象时,promise是pending状态。
Promise对象用一个函数作为参数,并且这个函数有两个参数resolve与reject,值得注意的是这两个参数也是两个函数。我们调用这两个函数,就会将Promise的状态切换到相对应的状态。
调用resolve,会切换到成功状态(并将异步操作的结果作为参数传递给外面);调用reject是失败的状态。
})
Promise实例生成之后,我们可以通过then方法分别 指定Resolved状态 和 Rejected状态 的 回调函数。
【Promise只是给了回调函数一个平台,我们将异步操作以同步方式表达出来】
promise.then(function(data) {
当promise切换到fulfill状态时,会调用该函数
console.log('当状态为fulfill我才会被调用',data)
},function(error) {
在此我们要注意:第二个回调函数是可选的
当promise切换到reject状态时,会调用该函数
console.log('当状态为reject我才会被调用',error)
})
then方法可以接受两个回调函数作为参数,这两个回调函数的参数都是promise对象传出的值】。
promise对象新建之后就会立即执行,then方法指定的回调函数将在当前脚本所有的同步任务执行完成之后才
会执行。
最后我们来谈一谈Promise对象的缺点。
1:
我们一旦创建了Promise对象,它是无法取消的,并且它会立即执行(箭在弦上)
2:
我们必须要将Promise与回调函数结合使用,意思是说,如果我们不通过then方法设置回调函数,
Promise对象的结果将不会反应到外部。
【以上,就是我向大家介绍的有关Promise的初级概念,我将在下一篇文章中,
向大家介绍Promise对象的其他方法比如race,all等方法】