关于Promise层层嵌套可读性差问题


 

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了 Promise对象
ES6 规定, Promise对象是一个构造函数,用来生成 Promise实例。
我们先来看看它的使用方法:
 1 const promise = new Promise(function(resolve, reject) {
 2 // ... some code  这里写异步操作代码
 3    ajax(api1,function(res){
 4          // 异步操作成功,请求数据成功
 5           resolve(value);//将promise设置为resolved完成状态
 6    },function(error){
 7          // 异步操作失败,请求数据失败
 8           reject(error);////将promise设置为rejected失败状态
 9    })
10 
11 });
resolve函数的作用是 在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject函数的作用是 在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去
 
Promise实例生成以后,可以用 then方法分别指定 resolved状态和 rejected状态的回调函数。
promise.then(function(value) {
// success
}, function(error) {
// failure
});

then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。

上面代码也可成如下形式

promise.then(function(value) {
// success 
}).catch(function(error){
     //error
})

在success 里面我们可以发起第二个请求

 

promise.then(function(value) {
// success
     ajax(api2,function(res){
          
     })
}).catch(function(error){
     //error
})

 

这个时候我们的两个请求明显的就有顺序

像是这样  new Promise(ajax1).then(ajax2).catch() ,使用了链式调用代替了嵌套结构,这样就避免了层层嵌套使的代码可读性太差!

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM