$.ajax(url1, function(data1){
// do something...
$.ajax(url2, function(data2){
// do something...
$.ajax(url3, function(data3){
// do something...
done(data3); // 返回數據
});
});
});
複製代碼
未使用promise,回調必須層層嵌套(回調地獄),代碼難以維護,第一的輸出是第二個的輸入時,須要等待上一個操做完成才能夠進行下一個操做,形成沒必要要的等待。javascript
promise只有異步操做的結果,能夠決定當前是哪種狀態,任何其餘操做都沒法改變這個狀態。java
pending->fulfilledpending->rejected。只要這兩種狀況發生,狀態就凝固了,不會再變了,會一直保持這個結果.ajax
代碼示例: 默認promise中的executor默認執行數組
let p=new Promise((resolve,reject)=>{
console.log(1);
});
console.log(2);
複製代碼
代碼示例: 調用onFuifilledpromise
let p=new Promise((resolve,reject)=>{
resolve('成功');
});
p.then((value)=>{//value成功的緣由
console.log(value);
},(err)=>{//err失敗的緣由
console.log(err);
})
複製代碼
代碼示例: 調用onRejected併發
let p=new Promise((resolve,reject)=>{
reject('失敗');
});
p.then((value)=>{//value成功的緣由
console.log(value);
},(err)=>{//err失敗的緣由
console.log(err);
})
複製代碼
代碼示例: 成功了就不能失敗,相反也同樣異步
let p=new Promise((resolve,reject)=>{//
resolve('成功');
reject('失敗');
});
p.then((value)=>{//value成功的緣由
console.log(value);
},(err)=>{//err失敗的緣由
console.log(err);
})
複製代碼
代碼示例: 成功了就不能失敗,相反也同樣函數
let p=new Promise((resolve,reject)=>{
throw new Error('發生錯誤');
});
p.then((value)=>{//value成功的緣由
console.log(value);
},(err)=>{//err失敗的緣由
console.log(err);
})
複製代碼
代碼示例:ui
Promise1().then((value)=>{
console.log(valuse);
return Promise2();
}).then((value)=>{
console.log(value);
return Promise3();
}).then((value)=>{
console.log(value);
})//能夠then到天荒地老
function Promise1(){
return new Promsie((resolve,reject)=>{
setTimeout(function(){//異步操做
console.log('異步1');
resolve('異步1傳的值');
},1000);
})
}
function Promise2(){
return new Promsie((resolve,reject)=>{
setTimeout(function(){//異步操做
console.log('異步2');
resolve('異步2傳的值');
},3000);
})
}
function Promise3(){
return new Promsie((resolve,reject)=>{
setTimeout(function(){//異步操做
console.log('異步3');
resolve('異步3傳的值');
},2000);
})
}
複製代碼
輸出的值爲: 異步1 異步1傳的值 異步2 異步2傳的值 異步3 異步3傳的值this
代碼示例:
let p=((isReady)=>{
return new Promise(()=>{
if(isready){
return resolve('hello');
}else{
return reject('failure');
}
});
})
p(true).then((value)=>{
console.log('resolved');
console.log(value);
console.log(aa);
}).catch((err)=>{
console.log('rejected');
console.log(err);
});
複製代碼
輸出的值爲: resolved hell rejected ReferenceError: aa is not defined...
代碼示例:
let p1=new Promise((resolve,reject)=>{
setTimeout(function(){
resolve('Promise1');
},1000);
})
let p2=new Promise((resolve,reject)=>{
setTimeout(function(){
resolve('Promise2');
},3000);
})
Promise.all([p1,p2]).then((result)=>{
console.log(result);
})
複製代碼
輸出結果 ['Promise1','Promise2']
代碼實例:
let p1=new Promise((resolve,reject)=>{
setTimeout(function(){
console.log(1);
resolve('Promise');
},3000);
})
let p2=new Promise((resolve,reject)=>{
console.log(2);
resolve('Promise2');
},1000)
Promise.race([p1,p2]).then((result)=>{
console.log(result);
})
複製代碼
輸出結果: 2 Promised 1
Promise的基礎就到這裏了,若是您以爲文章有用請點贊!!!