console.log()非同期または同期?

こんにちは世界 :

現在、Trevor BurnhamによるAsync Javascriptを読んでいます。これはこれまでのところ素晴らしい本です。

彼はこのスニペットとconsole.logがSafariとChromeコンソールで「非同期」であることについて話します。残念ながら、これを複製することはできません。これがコードです:

var obj = {}; 
console.log(obj); 
obj.foo = 'bar';
// my outcome: Object{}; 'bar';
// The book outcome: {foo:bar};

これが非同期の場合、私は結果が本の結果になると予想します。console.log()は、すべてのコードが実行されるまでイベントキューに入れられ、その後実行され、barプロパティを持ちます。

同期して動いているのに見えます。

このコードを間違って実行していますか?console.logは実際には非同期ですか?

ベルギ:

console.logは標準化されていないため、動作はかなり未定義であり、開発者ツールのリリースごとに簡単に変更できます。私の回答がすぐにわかるように、あなたの本は古くなっている可能性があります。

私たちのコードでconsole.logは、非同期であるかどうかに関係なく、コールバックなどは提供されていません。渡した値は常に参照され、関数を呼び出すときに計算されます。

そのとき何が起こるのか本当にわかりません(Firebug、Chrome Devtools、Opera Dragonflyはすべてオープンソースなので、できます)。コンソールはログされた値をどこかに保存する必要があり、画面に表示します。レンダリングは確実に非同期で行われ(レート制限の更新に抑制されます)、コンソールでログに記録されたオブジェクトとの今後の相互作用(オブジェクトプロパティの拡張など)も同様です。

そのため、コンソールは、ログに記録した可変オブジェクトを複製(シリアル化)するか、それらへの参照を保存します。最初のものは、ディープ/ラージオブジェクトではうまく機能しません。また、少なくともコンソールの最初のレンダリングでは、おそらくオブジェクトの「現在の」状態、つまりオブジェクトがログに記録されたときの状態が表示されますObject {}

ただし、オブジェクトを展開してそのプロパティをさらに検査すると、コンソールにはオブジェクトとそのプロパティへの参照のみが格納され、それらを表示すると現在の(すでに変更された)状態が表示される可能性があります。をクリックすると+bar例のプロパティが表示されます。

バグレポートに投稿された「修正」を説明するスクリーンショットを次に示します。

そのため、一部の値は、ログに記録されてからかなり後に参照される可能性があり、これらの評価はかなり遅延されます(「必要な場合」)。この不一致の最も有名な例は、ChromeのJavaScriptコンソールが配列の評価について怠惰なのかという質問で扱われています。

回避策は、たとえばを実行するなどして、オブジェクトのシリアル化されたスナップショットを常にログに記録するようにすることconsole.log(JSON.stringify(obj))です。ただし、これは非円形でかなり小さいオブジェクトに対してのみ機能します。参照してくださいどのように私はSafariではconsole.logのデフォルトの動作を変更することができますか?

より良い解決策は、デバッグにブレークポイントを使用することです。この場合、実行は完全に停止し、各ポイントで現在の値を検査できます。シリアル化可能なデータと不変のデータでのみログを使用します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

nodejsの「console.time」は同期または非同期ですか?

Console.logは非同期関数では機能しません

データは非同期でconsole.logになりません(React Native)

非同期API呼び出しから取得したデータをconsole.logする方法は?

フェッチされたインスタンスを持つconsole.log()は、非同期関数での実行を停止します

非同期関数は値を返しませんが、console.log()は次のことを行います:どうすればよいですか?

非同期機能が機能しないのはなぜですか?mongodbクエリの結果をconsole.logに記録したいだけですか?

Console.SetCursorPositionを非同期で使用する

非同期コードでconsole.log()は機能するが、array.push()は機能しないのはなぜですか?

非同期関数example()または非同期example()?

非同期待機呼び出し後のConsole.WriteLine。

promiseは非同期または同期で解決されますか?

Pythonでの非同期または並行

Promiseはノードjsで同期または非同期です

同期/非同期PythonでElasticSearchを挿入または更新します

非同期メソッドのConsole.ReadLineが進行をブロックしていません。

LambdaがSQSにプッシュ-同期または非同期

同期クエリまたは非同期クエリの作成

同期または非同期のデータのバインド

非同期GORMまたはDataAccessと同期コード

ログバックロギング-同期または非同期

将来およびyield構文の非同期または同期?

同期または非同期HTTPPOST / Getを作成する方法

同期クエリまたは非同期クエリの作成

リダイレクトされたstdoutへの非同期書き込みは同期または非同期ですか?

Python 2captcha(Twocaptcha)は非同期ですか?(または同期クラスを非同期で実行しますか?)

Console log promise nodejs

Golang HTTPサーバーは非同期または同期を要求しますか?

Kafkaの自動コミットは内部で同期または非同期ですか?

TOP 一覧

  1. 1

    グラフからテーブルに条件付き書式を適用するにはどうすればよいですか?

  2. 2

    ソートされた検索、ターゲット値未満の数をカウント

  3. 3

    Unity:未知のスクリプトをGameObject(カスタムエディター)に動的にアタッチする方法

  4. 4

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  5. 5

    Ansibleで複数行のシェルスクリプトを実行する方法

  6. 6

    Reactでclsxを使用する方法

  7. 7

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  8. 8

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  9. 9

    Pythonを使用して同じ列の同じ値の間の時差を取得する方法

  10. 10

    PowerShellの分割ファイルへのヘッダーの追加

  11. 11

    Chromeウェブアプリのウェブビューの高さの問題

  12. 12

    BLOBストレージからデータを読み取り、Azure関数アプリを使用してデータにアクセスする方法

  13. 13

    Crashlytics:コンパイラー生成とはどういう意味ですか?

  14. 14

    GoDaddyでのCKEditorとKCfinderの画像プレビュー

  15. 15

    Windows 10の起動時間:以前は20秒でしたが、現在は6〜8倍になっています

  16. 16

    MLでのデータ前処理の背後にある直感

  17. 17

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  20. 20

    ファイル内の2つのマーカー間のテキストを、別のファイルのテキストのセクションに置き換えるにはどうすればよいですか?

  21. 21

    ネットワークグラフで、ネットワークコンポーネントにカーソルを合わせたときに、それらを強調表示するにはどうすればよいですか?

ホットタグ

アーカイブ