概述
promise是异步编程的一种解决方案,常见的应用场景就是进行网络封装。
它的出现是为了更好地解决JavaScript中异步编程的问题,传统的异步编程最大的特点就是地狱般的回调嵌套,一旦嵌套次数过多,就很容易使我们的代码难以理解和维护。而Promise则可以让我们通过链式调用的方法去解决回调嵌套的问题,使我们的代码更容易理解和维护,而且Promise还增加了许多有用的特性,让我们处理异步编程得心应手。
网络请求的回调地狱
- 假设我们需要通过一个url1从服务器加载一个数据data1,data1中包含了下一个请求的url2
- 我们需要通过data1取出url2,从服务器加载数据data2,data2中包含了下一个请求的url3
- 我们需要通过data2取出url3,从服务器加载数据data2,data3中包含了下一个请求的url4
- 发送网络请求url4,获取最终的数据data4
在我们正常的情况下,上述代码不会发生问题,但是
存在一个问题,这样的写出来的代码不仅难看而且不易于维护,我们希望用另外一种更加优雅的方式来进行这种异步操作。就是采用我们的Promise
基本使用过程
- 基本使用过程,如代码所示:
/*
*使用异步操作的的情况会使用到Promise
*执行过程:new--->执行构造函数(执行一些相关操作:1.保存一些状态信息2.执行闯传入的函数)
* 在执行回调函数时,会传入两个参数,resolve,reject,这两个参数本身也是函数
*/
new Promise((resolve,reject) => {
/*
*再次可以进行你所想要进行的操作
* 成功时用resolve调用
* 失败是调用我们的reject
*/
//resolve('hello world')
//reject('error')
}).then((data )=>{
/*
*调用resolve时,再此进行代码处理
*
*/
onsole.log('hello,nice');
}).catch((error)=> {
//调用reject时,再次进行相关处理
console.log(error);
})
举个例子:假设我们需要每个一段时间就打印出相应的代码:
我们采用一个定时器来模仿异步事件:
我们一般写定时器如下所示:中间间隔一秒打印我们的hello world.
//1.使用定时器
setTimeout(() =>{
console.log('hello world');
console.log('hello world');
console.log