こんにちは。
「全然わからない」は流石に言い過ぎなのですが。
やっぱり使いこなすには至らず質問させていただきます。
自分の理想的な使い方。
やはり、非同期処理の嫌なところは書いた順番に処理し終えて行ってくれないため、それを回避するためにpromiseを使いたいですよね。
「これをやったら、次にこれをやって、これをやったら次これをやる」というように。
色々ドキュメントを漁ってみて。この使い方が一番、上で言ったような使い方ができると思いました。
nodejs
1var p1 = new promise(function(resolve,reject){ 2 // any function 3}) 4var p2 = p1.then(function(value){ 5 // any function 6})
これで多分、p1をやったらp2をやるっていうコードは書けてると思うのですが。あってますかね?
不明点。
上記の使い方があっていれば不明点は三つです。(最後の一つはJSの初歩的な質問かもしれません。。。お付き合いいただけると助かります。)
①上記のような方法だと、p1内部の処理の完全な終了を待って、p2が発火するのでしょうか?
例えば、p1で値を受け取り、p2ではその値を用いて処理をします。と言ったものがあるとします。
(補足ですが、p1 p2で想定している処理は、外部のデータベースより値を参照し、取ってくると言った非同期処理です。今回の場合はfirebase.databaseです。)
完全にp1の処理が終わってからp2の処理になってもらわないと、p2で参照した値はundefinedとなってしまいます。
②resolve,rejectってなんのためにあるの?
処理が成功するとresolve、エラーになるとrejectと言った漠然とした理解ですが。まずこれは正しいですか?
また。正しいと仮定して話を続けますが、promiseで連続させている次のfunction内に前の値を受け渡すのに、resolve,rejectを使用するのですか?
あまりなんのためにあるのか有用性が見えないのですが、どう便利なのでしょうか?
③連続したpromise内での変数の扱い。
これはpromiseに限った話ではなく、js全体の初歩的な話なのですが、ずっとviewのコーディングではstateでファイル内で共通して使う変数を管理してきたため。nodejsとして変数をいざ扱おうと思った時に混乱してしまいました。なので質問させてください。
以下の三つの①、②、③それぞれの出力はどうなりますでしょうか。
nodejs
1//there is root of file 2var outside = "this is out" 3any function(){ 4 var inside_any = "this is inside any" 5 function(){ 6 var most_inside = "Hi" 7 } 8 function(){ 9 console.log(outside + inside_any + most_inside) 10 //①はこの部分です。 11 } 12 13 var p1 = new promise(function(resolve){ 14 var inside_promise = "hello" 15 }) 16 var p2 = p1.then(function(resolve){ 17 console.log(inside_promise) 18 //②はこの部分です。 19 }) 20 21 console.log(inside_any + most_inside + inside_promise) 22 //③はこの部分です。 23}
このような使い方は正しいのでしょうか?
現在どのように変数の受け渡しが可能か手探りでやっていますので、至らない質問かもしれませんが、教えていただけると助かります。
また、このような使い方以外が必要な場合、どのような処理で対応していますでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/15 12:28
2018/01/15 13:02