Promise
でresolve/reject
したら、そこで処理が中断されて、then/catch
に飛ぶと思ってたが、どうやら違うようだ。
resolve/reject
では、処理の中段は発生しない。
new Promise((resolve, reject) => {
console.log('start')
resolve()
console.log('end')
})
.then(() => console.log('then'))
.catch(() => console.log('catch'))
こういうコード書いたときに、出力結果は、
// こうなる想定で上のコードを書いてる
start
then
// でも実際はこう
start
end
then
reject()
でcatch
に飛ぶ場合でも同様の挙動をとる。
それでも、resolve/rejectで処理を中断して、 then/catchに飛んで欲しい
resolve/reject
するときに、return
すればいいだけだった。
new Promise((resolve, reject) => {
console.log('start')
return resolve()
console.log('end')
})
.then(() => console.log('then'))
.catch(() => console.log('catch'))
start
then
おまけ:resolve/rejectで処理が中断しないなら…
こういうコード書いたら、どうなるんだろ
new Promise((resolve, reject) => {
console.log('start')
resolve()
console.log('naka')
reject()
console.log('end')
})
.then(() => console.log('then'))
.catch(() => console.log('catch'))
実際に試してみると、こうなった。
start
naka
end
then
resolve()
が実行された時点で、then
行きが決まり、そのあとのreject()
は無視されるようだ。