庫有axios
const p=new Promise((resolve,reject)=>{
resolve("success");//reject()
}).then(data=>{
console.log(data)
}).catch(err=>console.error(err))
- 成功返回用resolve()
- 否者使用reject() 返回
顯示報錯行數 reject(Error('fail'))
簡單使用
const repos=[
{name:"grit",owner:'mojomob',desc:'',id:1},
{name:"jsavesome",owner:'vanpelt',desc:'',id:2},
{name:"merb_core",owner:'wycats',desc:'',id:3},
];
const owners=[
{name:'mojomob',location:'loc1',follower:123},
{name:'vanpelt',location:'loc2',follower:45},
{name:'wycats',location:'loc3',follower:789},
];
function getReposById(id){
return new Promise((resolve ,reject)=>{
const repo=repos.find(repo=>repo.id===id);
if(repo){
resolve(repo)
}else{
reject(Error(`not find ${id}`))
}
})
}
function comnoundOwner(repo) {
return new Promise((resolve,reject)=>{
const owner=owners.find(owner=>owner.name===repo.owner)
if(owner){
repo.owner=owner
resolve(repo)
}else{
reject(Error("cont not find the owner"))
}
})
}
getReposById(1).then(repo=>{
return comnoundOwner(repo);
}).then(repo=>{
console.log(repo)
}).catch(err=>{
Error(console.log(err))
})
多個promise
Promise.all()
Promise.all([promise1,promise2]).then(response=>{
console.log(response)
const [p1,p2]=response
})
const promise1=new Promise((resolve,reject)=>{
setTimeout(function(){
resolve('promise1')
},1000)
})
const promise2=new Promise((resolve,reject)=>{
setTimeout(function(){
reject('promise2')
},2000)
})
Promise.all([promise1,promise2]).then(response=>{
console.log(response)
const [p1,p2]=response
}).catch(err=>{
Error(console.log(err))
})
- 所有的均reslove返回時纔會執行then,否者就執行catch
Promise.race()
- 狀態由先返回來的那個的返回狀態決定
const promise1=new Promise((resolve,reject)=>{
setTimeout(function(){
reject('promise1')
},1000)
})
const promise2=new Promise((resolve,reject)=>{
setTimeout(function(){
resolve('promise2')
},2000)
})
Promise.race([promise1,promise2]).then(response=>{
console.log(response)
const [p1,p2]=response
}).catch(err=>{
Error(console.log("err:"+err))
})