Bug #061
🪲 Znajdź buga
const promise1 = new Promise((resolve) => {
resolve("foo")
})
const promise2 = new Promise((resolve) => {
resolve(promise1)
})
console.log(promise1)
console.log(promise2)
promise2.then((value) => {
console.log(value)
console.log(value === promise1)
})
Mamy 2 obietnice: promise1
rozwiązuje się zwracając wartość foo
, a promise2
rozwiązuje się zwracając promise1
.
Co zostanie zalogowane do konsoli w poszczególnych miejscach?
Czy rozwiązanie promise2
poprzez then
zwróci w value
tą samą obietnicę, która została przekazana w resolve()
?
🧪 Rozwiązanie
const promise1 = new Promise((resolve) => {
resolve("foo")
})
const promise2 = new Promise((resolve) => {
resolve(promise1)
})
console.log(promise1) // Promise {}
console.log(promise2) // Promise {}
promise2.then((value) => {
console.log(value) // foo
console.log(value === promise1) // false
})
promise1
i promise2
to obiekty Promise
, co jest wyraźnie logowane do konsoli w liniach 8 i 9.
promise2
, mimo że w założeniu rozwiązuje się do obiektu promise1
, finalnie zostaje rozwiązane do wartości foo
.
resolve()
spłaszcza przekazane obietnice jeśli takie zostają przekazane jako wartość rozwiązania obietnicy i rozwiązuje je wszystkie.
value
po rozwiązaniu promise2
, będzie więc wartością przekazaną w resolve()
w promise1
.
value === promise1
zwróci więc fałsz, bo value
to foo
, a nie obiekt obietnicy promise1
.
🎢 Plac zabaw
Otwórz edytor w nowym oknie📑 Linki
❤️ Podobają Ci się bugi JS?
Podziel się linkiem ze znajomymi:
https://codisity.pl/100-bugow-js