关于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() ,使用了链式调用代替了嵌套结构,这样就避免了层层嵌套使的代码可读性太差!

 

 

猜你喜欢

转载自www.cnblogs.com/whao-stardust/p/10118079.html