es6非同步

promise, async/await

by Shang-De You

JavaScript

// ========== Promise ==========
let getName = new Promise((resolve, reject) => {
  setTimeout(() => {
  	console.log("getName done")
  	data = "James"
    resolve(data)
  }, parseInt(Math.random() * 500));
})
let getLocation = new Promise((resolve, reject) => {
  setTimeout(() => {
    console.log("getLocation done")
  	data = "Taipei"
    resolve(data);
  }, parseInt(Math.random() * 500));
})
let getYear = new Promise((resolve, reject) => {
  setTimeout(() => {
  	console.log("getYear done")
  	data = 2018
    resolve(data)
  }, parseInt(Math.random() * 500));
})

/*Promise.all([getName, getLocation, getYear])
	.then((data)=> {
    // 一次性同時回傳成功訊息,回傳以上三個數值的陣列
    console.log(data);
  }).catch( err => {
    // 失敗訊息 (立即)
    console.log(err)
  })
*/
  
// ========== async function ==========  

let async_viewData1 = async () => {
	let promise = await Promise.all([getName, getLocation, getYear])
  let data = {
  	name: promise[0],
    location: promise[1],
    year: promise[2]
  }
  return data
}


let async_viewData2 = async () => {
	let promise = await Promise.all([getName, getLocation, getYear])
  let data = {
  	fullName: promise[0],
    city: promise[1],
  }
  return data
}


async_viewData1()
	.then(result => {
  	console.log(result)
  })
  .catch(err => {
    console.log("fail")
  })
  
async_viewData2()
	.then(result => {
  	console.log(result)
  })
  .catch(err => {
    console.log("fail")
  })