Skip to main content

Promise(expresstion)

寫出來立即執行 立即可與一個承諾,會成功或失敗

使用 .then 成功的話 .catch 失敗的抓起來

const myPromise = new Promise((resolove, reject) => {
const x= 1
if (x>0){
resolve(x)
} else {
reject("qq")
}
})
myPromise
.then((data) => {
return data + 1
})
//沒問題進入then
.then((data) => {
return data + 2
})
//出問題進入catch
.catch((error) => {
})

不要立即執行需要要 function 包起來

const getPromise =()=> new Promise((resolove, reject) => {
const x= 1
if (x>0){
resolve(x)
} else {
reject("qq")
}
})
getPromise()

async(非同步) / await(等待)#

async function:回傳 promise 的簡寫

async 的 function 裡做 await

await 只能放在 async 裡面

外層的要做承諾 裡面的可以慢慢等

防止函式暴掉可使用 try...catch

const getMYNewPromise = async (a, b) =>{
try{
const user = await getUser()
}catch(error){
}
const x = a+ b
if(x > 0){
return x
} else {
throw new Error('qq')
}
}

不使用 promise 跟 async 的情況下,可使用 callback function(回調)#

//callback = bar的callback function
const bar = (callback) =>{
callback()
}
////
const bar = (a, b, sussessCallback, failtureCallback) =>{
const x = a + b
}
bar(() =>{
console.log('i am callback')
})

練習 答案

tip

如果 function 執行完 回傳 promise 代表它為非同步的

Promise.all()#

會把東西收集起來 一次跑

Promise.all([P1,P2,P3])
.then(data=>{
//[ret1,ret2,ret3]
})
const members = []
const getMemberPromise = []
for (const memberId of memberIds) {
const getMemberPromise = getMember(memberId)
getMemberPromise.push(getMemberPromise)
}
Promise.all(getMemberPromise)
.then(members =>{
console.log("members:",members)
})
.catch(()=>{
console.error('無法取得會員資料')
})
const getMembers = async (memberIds) => {
const members = [];
for (const memberId of memberIds) {
const member = await getMember(memberId);
members.push(member);
}
return members;
};