Promise 最大的用途?

最麻煩的非同步。

簡述

我想它最大的用途是用來處裡「非同步」的行為。

舉個例子:

1
2
3
4
5
6
7
const sleep = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('我睡飽了');
}, 1000)
});
// 一秒後印出 '我睡飽了'
sleep.then(end => console.log(end));

簡單來說,不管你在 Promise 裡面做什麼非同步操作,then 都會等到 resolve 被 trigger 才會執行。

再來看個例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
function sleep (ms) {
return new Promise(resolve => {
setTimeout(resolve, ms)
})
}
sleep(1000)
.then(first => {
console.log('1 秒過了,', first)
return sleep(1000)
})
.then(second => {
console.log('又 1 秒過了,', second)
})

這邊只是想確認你知道流程是什麼:

  1. sleep(1000) 會回傳一個 Promise,而這個 Promise 會在一秒後呼叫 resolve,因此第一個 then 就會在一秒之後被執行。

  2. 接著,then 裡又回傳了 sleep(1000),等於又回傳了一個 Promise,所以一秒後 Promise 又呼叫 resolve,執行了下一個 then

另外,因為 resolve 並沒有傳入任何值,所以兩個 then 都只會拿到 undefined

async await 背後的原理 自己捏一個 Promise
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×