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

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

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

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

Q&A

解決済

2回答

1705閲覧

Promiseと非同期処理の混在について

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2017/07/31 08:42

JavaScriptのコールバック関数とPromiseの混在について教えてください。

JavaScriptの世界において、コールバック地獄を回避するための方法として、
Promiseを使う方法があることはわかりました。

自分で作成するコードならばPromiseで置き換えていくことは可能だと思いますが、
例えば、コーバック関数を受け取るI/Fを持った既存のライブラリを呼び出す場合において、
これらをPromiseで置き換えることは可能なのでしょうか?

もしくは、その部分はコールバックのままとし、
自分の実装部分だけをPromiseとする共存しか方法はないでしょうか?

もし既存のI/Fをうまく置き換える(ラップする?)方法があるようでしたら、
ご教示ください。

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

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

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

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

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

yambejp

2017/07/31 08:45

具体的に何をどうしたいかわかりません。Promiseも万能ではないのでなんともいえませんが、おそらくある程度のことならなんとかなるとおもいます
horse_n_deer

2017/07/31 13:26

質問の内容は「既存のコールバック関数の戻り値をPromiseにしたい」でしょうか?「promisify」で検索してみてください。
guest

回答2

0

ベストアンサー

こんな感じでどうでしょうか

JavaScript

1// promiseでラップ 2new Promise(function (resolve, reject) { 3 asyncFunc( 4 function() { 5 // do something 6 resolve() 7 }, 8 function() { 9 // do something 10 reject() 11 } 12 ) 13}) 14 15// callbackを受け取る関数 16function asyncFunc(callback, errorCallbak) { 17 // do something 18}

投稿2017/07/31 09:07

編集2017/07/31 09:11
YukiYonekura

総合スコア127

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

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

退会済みユーザー

退会済みユーザー

2017/07/31 22:53

こういった使い方もあるんですね、大変参考になりました。
guest

0

PromiseというかDeferredですね。

Javascript

1function doSomeAsync() { 2 3 var d = new $.Deffered(); 4 5 //オリジナルコールバックを持つfunction 6 someAsync(function(){ 7 //成功時 8 d.resolve(); 9 10 }, function(){ 11 //異常時 12 d.reject(); 13 14 }); 15 16 return d.promise(); 17} 18 19//通常のDefferedのdone,when,then,failが使える 20doSomeAsync().done( function(){ 21 22}).fail(function(){ 23 24 25}); 26}

投稿2017/07/31 09:05

編集2017/07/31 09:06
Tak1016

総合スコア1408

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問