Open tamiya028 opened 8 years ago
たぶん並列に実行されているからではないでしょうか。Query2.findも実行はされているのですが、Query1.findのforのが速いのでQuery2.findの結果が返る前に終了しているのだと思います。
どういった処理がしたいのでしょうか?
迅速な助言をありがとうございます。 Query1.findのdataにflagを入れたいのですが、Query2.findの条件と一致した時にtrueをdata.flagに入れて、sample[i]に代入するような処理がしたいです。 現状ではconsole.log(sample[i])をすると、{flag: false}, {flag: false}, {flag:false}のようになってしまい、sample[i]にdata.flag = falseが全て入った後にQuery2.findのflagがdataに入ってしまっているようなので、全て回ったあとにdataにはtrueが入ってはいるのですが、sample[i]には入っていないみたいで、 {flag: true}, {flag: false}, {flag: true}のようにしたいです。 説明下手で申し訳ありません…
なんとなくですが、dataというのを使わないで、sample[i] = {} をQuery1.findのループの中で定義した方が良いかと。でないと次のループになるたびにdataがリセットされてしまいます。
で、data.flag = true としているところを sample[i].flag = true とすれば良いかなと。ただ、この場合でもiが次のループに入ってしまっている可能性が高いので、
function (i) {
Query2.find({
:
sample[i].flag = true;
});
}(i);
のようにスコープを区切ってあげる必要があるかなと。
JavaScriptの非同期処理は色々と気を遣うので頑張ってください!
スコープを意識することが大切なんですね… moongiftさんのおかげで、何とか実装することができました! ありがとうございました!
よかった! :+1:
NCMBとMonacaで開発を行っています。 以下のようなことがしたいのですが、Query1のforが全て回った後にQuery2が実行されてしまいます… 勉強を初めたばかりでかなりの初心者なのですが、よろしくお願いします。