[過去ログ] 【node.js】サーバサイドjavascript 3【io.js】©2ch.net (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
23
(5): 20 2015/01/04(日)00:38 ID:LcMrfHes(2/4) AAS
>>21
ブラウザのJavascriptもシングルスレッドじゃなかったっけ?
であれば、
・渡されたコールバックを確実に非同期で実行する
・飲み込まれた例外をデバッグ出来る
はPromise使わなくてもできるよ。使った方が楽だろうけど。
24
(2): 2015/01/04(日)00:53 ID:kuXg+7pG(3/7) AAS
>>23
> ・渡されたコールバックを確実に非同期で実行する
これはsetTimeout使ったハックがあってほぼ確実なのは可能だけど、
絶対確実な実装はブラウザが内部で実装しないと無理なんだよね

> ・飲み込まれた例外をデバッグ出来る
そりゃ、ライブラリ内部のcatch内にブレークポイントを張って待ちかまえていれば
可能だが毎回そんな事すんのか?いやするわけない
そして例外がスルーされて何も起きない
26: 2015/01/04(日)00:56 ID:NffMCEWR(4/14) AAS
安価ミス、>>25の後半は>>23へのレス
あとBlurbirdじゃなくてBluebird
33
(2): 2015/01/04(日)03:42 ID:NffMCEWR(8/14) AAS
>>32
> これが実行される前にcallbackが絶対実行されない
ことを保証してんの?

仕様はそうなってる
外部リンク[html]:dvcs.w3.org

> そもそも非標準のAPIなんだけど…

そこはこのNotesに書いてある"platform code"から好きなものに置き換えてくれ
外部リンク:github.com

> QとかBluebirdみたいに自前で実装すると例外が飲まれるって話しじゃなかったのか…

>>23(これは俺とは別人)からは「それPromise使わなくてもできるよ」って話をしてるな
それは当然JSで書かれたQやBluebirdでもできるってことだから元の話と違ってるわけではない、スコープが広がっただけ
で、QとかBluebirdだと例外が飲み込まれるわけ?コードで示せる?
48: 23 2015/01/04(日)20:31 ID:LcMrfHes(3/4) AAS
>>34,43
>Schedules to run handler immediately after user agent events have been flushed.
>user agent eventsってなんだ?
ここで言っているuser agent eventsはHTML要素のon〜属性に指定したイベントハンドラ関数みたいだね。
1章のIntroductionで「user agent eventsの中で画面を書き換えるような処理を書いて、
その後の処理を行う前にその変更を画面に反映させたいときに、今まではsetTimeout(fn,0)を
使ってただろうけど、それだと遅延が発生するからsetImmediateてメソッドを定義するよ」
ってな感じのことが書いてある。

>> そこはこのNotesに書いてある"platform code"から好きなものに置き換えてくれ
>置き換えて何だよ?
Notes の記述に、
This can be implemented with either a "macro-task" mechanism such as setTimeout or setImmediate,
or with a "micro-task" mechanism such as MutationObserver or process.nextTick.
「これは、setTimeout,やsetImmediate (”マクロタスク”機構)、またはMutationObserverやprocess.nextTick
("マイクロタスク"機構)を使っても実装できるよ」
って書いてあるね。この中のどれを使って置き換えても実現できるということだね。

例外処理についても>>44の通りで、それ以上に言うべきことはないかな。
ただデバッガとかブレークポイントとかの言葉が出ていたから、
必要以上に難しく考えていたんじゃないかという気がしないでもない。
49: 23 2015/01/04(日)20:43 ID:LcMrfHes(4/4) AAS
>>43
>たとえばQはこの辺で"platform code"を呼び分けてる (モダンブラウザだとpostMessage()が使われてるな)
MessageChannel 知らんかった。。。
node.js では process.nextTick、ブラウザでは setTimeout と使い分けるだけだったよ。
勉強になった、サンクス。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.056s