Promiseのエラーの表記

Promiseを用いて他アプリと連携したカスタマイズを作っています。

コードは長くなるので流れだけ書くと下記の通りです。

 

アプリAから取得成功時then(function(resp1)→アプリBから取得成功時then(function(resp2)→アプリCに登録成功時then(function(resp3)→

エラーcatch(function(resp3)→エラーcatch(function(resp2 )→エラーcatch(function(resp1)

 

このようにthenとcatchで入れ子にして処理を書いています。

 

動いているのでカスタマイズ自体は問題ないのですが、

コードが見づらいので、下記サイトを参考にcatchを1つにまとめようかと考えています。

しかし、resp2の取得に失敗した場合のみメッセージを表示するように処理したいのですが、

catchをまとめて記述しても可能でしょうか?

 

よろしくお願いします。

 

https://developer.cybozu.io/hc/ja/articles/360023047852-kintone%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8BPromise%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9%E3%81%AE%E5%9F%BA%E6%9C%AC

J さん

こんにちは。ひよこです。

catch をまとめて書くと、「resp2 の取得に失敗した場合のみメッセージを表示する」は難しいですね。

おっしゃるように、入れ子で書くか、補足したいエラーの部分だけ catch を書いておき、改めて Error を投げると少しマシかもしれません。
改めて Error を投げるのは、補足したいエラーのところでエラーが潰されるので、後続の処理が進んでしまうのを防ぐためです。

kintone.api('/k/v1/record.json', 'GET', { app: kintone.app.getId(), id: 1 }).then(function(resp) {
console.log("Response 1", resp);
return kintone.api('/k/v1/record.json', 'GET', { app: kintone.app.getId(), id: 2 }).catch(function(err) { // 存在しないレコード番号
window.alert("2番目でエラー");
throw err; // 3行目の catch でエラーが補足されて後続の処理が進むので、エラーを投げ直す
});
}).then(function(resp) {
console.log("Response 2", resp);
return kintone.api('/k/v1/record.json', 'GET', { app: kintone.app.getId(), id: 1 });
}).then(function(resp) {
console.log("Response 3", resp);
}).catch(function(err) {
console.log(err);
});