LoginSignup
1
2

More than 5 years have passed since last update.

ネストするPromise

Last updated at Posted at 2018-08-28

JavaScriptのネストするPromiseで混乱したので、サンプルコード書いて理解しました。その時のコードを貼っておきます。

//
// 引数に1を渡すと成功、それ以外失敗
//
function func1(a) {
  return new Promise((resolve, reject) => {
    if (a === 1) {
      resolve()
    } else {
      reject()
    }
  })
}

//
// func1をネストして呼び出す
//
function main() {
  func1(1).then(() => {
    console.log("ok1")
    return func1(1).then(() => {
      console.log("ok2")
      return func1(1).then(() => {
        console.log("ok3")
      }).catch(() => {
        console.log("ng3")
        // catchした場合、rejectを返さないと呼び出し元でcatchではなくthenに流れるので注意
        return Promise.reject()
      })
    })
  }).then(() => {
    // ok3までいったら、ここに来る
    console.log("ok all")
  }).catch(() => {
    // 途中で失敗したら、ここに来る
    console.log("ng")
  })
}

この例ではmain()のfunc1()呼び出しはすべて引数1なので、すべて成功して以下のようにコンソールに表示されます。

ok1
ok2
ok3
ok all

3回目のfunc1()の引数を1以外にして失敗させてみます。

-      return func1(1).then(() => {        
+      return func1(2).then(() => {        
          console.log("ok3")      

結果はこうなります。

ok1
ok2
ng3
ng
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2