example 1
w1 =>w3=>w2
function w1(){
return new Promise(function (resolve, reject) {
setTimeout(()=>{
console.log("w1");
resolve({w1:"w1数据"})
},2000)
});
};
function w2(data){
return new Promise(function (resolve, reject) {
setTimeout(()=>{
console.log("w2:"+data);
resolve({w1:"data:w2数据"})
},1000)
});
};
function w3(){
console.log("w3");
};
//[区别example2]
w1().then((data)=>{
w2(data)
}).then((data)=>{
w3();
}).catch((error)=>{
console.log(error);
})
总结:function W3 在w2执行,因为then指代于w1,w3和w2无关系
example 2
w1=>w2=>w3
function w1(){
return new Promise(function (resolve, reject) {
setTimeout(()=>{
console.log("w1");
resolve({w1:"w1数据"})
},2000)
});
};
function w2(data){
return new Promise(function (resolve, reject) {
setTimeout(()=>{
console.log("w2:"+data);
resolve({w1:"data:w2数据"})
},1000)
});
};
function w3(){
console.log("w3");
};
//区别[example1]
w1().then((data)=>{
w2(data).then((data)=>{
w3();
}).catch((error)=>{
console.log(error);
})
}).catch((error)=>{
console.log(error);
})
总结:执行顺序w1=>w2=>w3,但是不属于链式结构
example 3
function w1(){
return new Promise(function (resolve, reject) {
setTimeout(()=>{
console.log("w1");
resolve({w1:"w1数据"})
},2000)
});
};
function w2(data){
return new Promise(function (resolve, reject) {
setTimeout(()=>{
console.log("w2:"+data);
resolve({w1:"data:w2数据"})
},1000)
});
};
function w3(){
console.log("w3");
};
//[区别example2]
w1().then((data)=>{
return w2(data)
}).then((data)=>{
return w3();
}).catch((error)=>{
console.log(error);
})
总结:执行顺序w1=>w2=>w3,链式结构
example 4【进阶】
//[定义一个公共的promise实例]
function sendRequest(url, param) {
return new Promise(function (resolve, reject) {
request(url, param, resolve, reject);
});
}
//ajax发送请求
function request(url, param, resolve, reject){
setTimeout(()=>{
console.log(url,param);
resolve({id:1,name:'AA'});
},1000)
};
//数据依次依赖前一个请求的值
sendRequest().then(function(data1) {
console.log('第一次执行, 这是返回的数据:', data1);
return sendRequest(data1.id,data1.name);
}).then(function(data2) {
console.log('第二次执行, 这是返回的数据:', data2);
return sendRequest();
}).then(function(data3) {
console.log('第三次执行, 这是返回的数据:', data3);
}).catch(function(error) {
//用catch捕捉前面的错误
console.log('sorry, 请求失败了, 这是失败信息:', error);
});