2017年4月24日 星期一

nodejs 7.6 將原有method改用async

node 7.6後完全支援async的使用
原本利用callback取得非同步資料的寫法
在使用async時 可用以下方式改寫
ㄧ.原本要被執行的各個執行method 都需改成回傳Promise
1.原method 利用callback取得結果
var getData = (callback)=>{
  queryDB((err,result)=>{
    resultObj = {
      err:err
      data:result
    }
    callback(resultObj)
  })
}

2.method 改成return Promise
透過resolve與reject取得結果
let getData = ()=>{
  return new Promise((resolve,reject)=>{
    queryDB((err,result)=>{
      resultObj = {
        err:err
        data:result
      }
      if(err){
        //完成
        resolve(resultObj)
      }else{
        //錯誤
        reject(resultObj)
      }
    })
  })
}

二.使用async
1.原使用單位,直接呼叫,由callback取得結果
getData((resultObj)=>{
  console.log(resultObj)
})

2.改用async
需先定義一個async function,在aync function內去執行
透過try catch去取得正確與錯誤的資訊
const run = async ()=>{
  try{
    //取得結果,即是取得resolve傳進來的內容
    let resultObj = await lodaMethod()
  }catch (err) {
    //錯誤攔截 ,即是取得呼叫reject傳進來的內容
    console.log(err)
  }
}
run()


沒有留言: