ES 之 promise

庫有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))
    })
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章