お世話になっております。髙木と申します。
chromeブラウザのデベロッパーツールでプログラムの流れを確認しているのですが、思っている動きと違う動きをします。
具体的には下記のようなプログラムです。
for each① 文{
kintone.api(GET文){
for each② 文{
}
}
}
想定では、①のforの要素分、GETを繰り返して、GETした値を②のfor分で繰り返し参照するような感じです。
しかし、①のforの要素分をGETで繰り返して完了した後に②のfor分が流れ始めているようです。
promise文は使用してみましたが、動きは変わらずでした。
何か根本的に間違えているのでしょうか。
解決のヒントや原因が分かる方はご回答よろしくお願いいたします。
髙木 さん
kintone.api が非同期処理ですので「for each①」は、kintone.api の完了を待たずに進んでいきます。
>promise文は使用してみましたが、動きは変わらずでした。
kintone.api と「for each②」の部分のみを promise 対応したのだと思いますが、非同期処理に変わりはないため、
promise の完了を待たずに「for each①」の処理は進みます。
対応策ですが、「for each①」のループ処理の代わりに処理を関数化して再帰呼び出ししましょう。
下記が参考になると思います。
Promiseを利用したモダンなアプリの全レコード取得の書き方
rex0220様、ご回答と有力な情報ありがとうございます!
いただいたURLを参考に、再帰呼び出しを使用して同期処理の実現をすることが出来ました!
ありがとうございます!
いただいたコメントからkintone.apiを使用した時のプログラムの流れが少し見えてきました。
非同期処理・同期処理についても、ワードとして頭の中に全くなかったため、良い勉強になりました。
同期処理後の表示まで気になるくらいの時間差がありますが、処理内容を工夫して対応したいと思います。
ご回答ありがとうございました!
スピナーを表示すると、何かやってるというのがわかるので、あまり気にならなくなるかもしれません。
spin.js を使って、スピナー(ローディングアイコン)を設定しよう!
rex0220様、追加の情報ありがとうございます!
早速使用させていただきましたが・・すごいですね!
処理中は画面が止まって、完了後はきれいに表示されました。
違和感も全くなく、WEBって感じで非常に使い勝手がいいです!
多くの有益な情報、ありがとうございました!