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")
})