簡單介紹了很厲害的青梅竹馬
工具人們:所以說人帥又強真好啊....你有看過昨天吵很兇的網路文章嗎?
我:什麼文章?
工具人們:就是一篇叫什麼渣男給不完的promise,那算什麼啊,有沒有想過我們工具人的心情?以為我們自願當工具人?
resolve
、reject
,自己決定工具人們:在變成工具人前,我其實也會看事情拒絕reject
的,像是那種劈頭就獅子大開口的..
const deny = new Promise((resolve,reject)=>{
console.log("你聽過...(?)")
reject("我ok,你先聽");
})
deny;
仔細看會發現有幾個不懂的值,簡單說明:
[[PromiseState]]
:回傳Promise
狀態[[PromiseResult]]
:根據reject
或是resolve
回傳對應的值工具人們:當你覺得一件事合理可以做時,像是要是有人約你去他家看貓時,合理嘛當然會resolve
。
const okDESU = new Promise((resolve,reject)=>{
console.log("要來看我家貓後空翻嗎?");
resolve("真的嗎?好啊好啊")
})
我:那你們是怎麼淪落到今天的啊... 都看過貓了(?)
工具人們:何止呢?我們給過的Promise
可不只這樣..
Promise
Promise.race
阿物件:我先講講我的故事好了,是這樣的,回想我年輕時,那時候認識了三個女生,我甚至還記得她們的名字:sophia
,alanna
,ray
。
function sophia() {
return new Promise((resolve, reject) => {
setTimeout(
() => {
resolve("sophia:跟我交往好嗎!")},
(Math.random() + 1) * 1000
);
});
}
function alanna() {
return new Promise((resolve, reject) => {
setTimeout(
() => {
resolve("alanna說:跟我交往好嗎!")},
(Math.random() + 1) * 1000
);
});
}
function ray() {
return new Promise((resolve, reject) => {
setTimeout(
() =>{
resolve("ray說:跟我交往好嗎!")},
1000
);
});
}
Promise.race([sophia(), alanna(), ray()]).then((isWho) => {console.log(isWho)});
阿物件:因為很渴望交到女朋友,來擺脫魔法師的稱號,所以誰先跟我告白就接受。
最後,看似要脫魯了,結果...
那天Ray
說:希望讓她再考慮一下,之後就突然聯絡不上了。
Promise.race
公式:
Promise.race(iterable)
輸入值:可迭代值(iterable) ex:string
,array
回傳情境:當promise
內任一個reject
、resolve
完成時
回傳值:
- 當輸入值不是
promise
時,回傳一個fulfilled
的promise
,值為第一個不是promise
的值- 是
Promise
物件時,回傳狀態pending
的物件:
a. 皆為resolve
:race
內容執行完成,最先執行完的值會執行then
b. 任一值為reject
,仍會 將race
內容都執行完成,但並不會執行then
Promise.all
,Promise.allSettled
方函式:頭等工具人...指的不只是能力,同時也是一種態度,不然其實我也是很夯的,想當初...
function sophia(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log("sophia:跟我交往好嗎!")
resolve("sophia:跟我交往好嗎!")},(Math.random()+1)*1000)
})
}
function alanna(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log("alanna說:跟我交往好嗎!")
resolve("alanna說:跟我交往好嗎!")},(Math.random()+1)*1000)
})
}
function ray(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
console.log("ray說:跟我交往好嗎!")
resolve("ray說:跟我交往好嗎!")},(Math.random()+1)*1000)
})
}
Promise.all([sophia(),alanna(),ray()]).then((isWho)=>console.log("我拒絕"))
方函式:一次三個女生都跟我告白後,接著我全部都拒絕了,因為我愛的人只有JS。
Promise.all
公式:
Promise.all(iterable)
輸入值:可迭代值(iterable) ex:string
,array
回傳情境:當全部promise
皆resolve
時,或一個reject
時
回傳值:
- 當輸入值不是
promise
時,回傳一個fulfilled
的promise
,值為第一個非promise
- 是
Promise
物件時,回傳狀態pending
的物件:
a. 皆為resolve
:將all
內容都執行完成,會執行then
b. 任一為reject
,將all
內容都執行完成,但並不會執行then
兩者差異:
根據MDN是這樣說的:
In comparison, the Promise returned by Promise.all() may be more appropriate if the tasks are dependent on each other / if you'd like to immediately reject upon any of them rejecting
Promise.all
,Promise.allSettled
的差別為,如果有reject
,all
會立刻回傳。
-- to be continued --
那今天就到這邊摟!
每天的休息,是為了後面的追求,明天見。