質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

解決済

1回答

3659閲覧

return promiseの直後にthenが記載されている場合の動きについて

akabee

総合スコア1947

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

0クリップ

投稿2017/05/25 00:49

promiseを返却するようなfunctionで、return promise の次の行あたりに.thenが記載されているようなコードを見ることがあります。

例えば次のようなコードです。
引用元:こちら

JavaScript

1app.factory('PopulationFactory', function ($http) { 2 3 4 var PopulationFactory = { 5 6 getAllViews: function() { 7 return $http.get('/views') 8 .then(function(res) { 9 return res.data 10 }) 11 }, 12 13 getAllUsers: function() { 14 return $http.get('http://127.0.0.1:1337/api/users') 15 .then(function(res) { 16 return res.data; 17 }); 18 }, 19 20 getAllProducts: function() { 21 return $http.get('http://127.0.0.1:1337/api/products') 22 .then(function(res) { 23 return res.data; 24 }); 25 }, 26 27 28 }; 29 30 return PopulationFactory; 31 32});

この場合、functionの戻り値はpromiseとなり、受け取り側でも.thenを記述することができると思います。
function側に記載されているthenの実行タイミングや、利用意義が良く分かりません。

そもそも、returnの後に何か実行を期待する命令が記載されていること自体が良く分かっていません。(そこでfunctionの実行は完了してしまうのでは?)

戻り値を返しているfunction側で、returnの後に記載されているthenは、いつどのタイミングで動作し、どのような役割で利用されることが多いのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

この場合、.then前の行とつながって$http.get(...).then(...)が返り値となります。

JavaScriptの場合、一部の箇所(return (直後に改行)など)を除いて、改行を無視して文法的に矛盾しないなら、改行はただのスペースと同じ扱いとなります。

投稿2017/05/25 01:13

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akabee

2017/05/25 13:00

改行していると見るのではなく、return promise.then(...)と記載されていると見るということですかね。 では関数の呼び元でも戻り値のpromiseに対しthenを定義している場合、関数内のthenは上書きされるような動きになりますか?
akabee

2017/05/25 13:07

なるほど、チェーンになるのですか。考えてみれば当たり前ですね。ありがとうございます。納得しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問