網上看了些資料,總結以下幾種方法
1,數據管道方法,這個方法用的場景:URL1請求返回的數據1,請求URL2的傳參是數據1,返回數據2,請求URL3的參數是數據2.
new Promise(function(resolve, reject) {
resolve(1);
})
.then(function(res) {//1
return new Promise(function(resolve, reject) {
resolve(res+1);//2
});
})
.then(function(res) {
return new Promise(function(resolve, reject) {
resolve(res+1);//3
});
})
.then(function(res) {
console.log(res,"結果");//返回3
})
2.用promise請求url,return一個promise對象,解決異步方法嵌套問題
ajax(參數){
return new Promise((resolve, reject)=>{
ajax(參數,res=>{
if(res.status == '200'){
try{
resolve (JSON.parse(返回成功的結果))//返回成功的結果
} catch (e){
reject(e)//失敗的結果
}
}
})
})
}
ajax(url).then(
res =>{
console.log(res))/返回成功的結果
}
)
.catch(err =>{
console.log(err)
})
3.promise.all, 使用場景請求多個ajax,放在一個變量里面,等到結果全部請求成功后供其他方法使用。
let list=(time)=>{
return new Promise((resolve, reject)=>{
setTimeout(()=>{
resolve(`${time/1000}秒后出來`)
},time)
})
}
let p1=list(3000)
let p2=list(2000)
Promise.all([p1,p2])
.then((res)=>{
//就算p1請求的時間長,也要等他數據出來后,才打印出[p1,p2]。這個誰放在前邊,先請求誰。可以加載loading室使用這個方法
console.log(res)// ["3秒后出來", "2秒后出來"]
})
.catch((err)=>{
console.log(err)
})