JS 9 Promise 面接の質問

JS 9 Promise 面接の質問

1. 複数の .catch

var p = new Promise((resolve, deny) => {
  拒否(エラー('失敗しました!'))
})
p.catch(エラー => console.log(エラー.メッセージ))
p.catch(エラー => console.log(エラー.メッセージ))

上記のコードの出力は何でしょうか?正しい答えを選択してください:

  • [ ] メッセージを印刷する
  • [x] メッセージを2回印刷する
  • [ ]未処理のPromise拒否警告
  • [ ] プログラム終了

分析:

コンストラクター メソッドを使用して Promise を作成し、拒否コールバックを介してすぐにエラーをトリガーします。

次に、.catch は DOM の .addEventListener(event, callback) または Event Emitter の .on(event, callback) と同様に動作し、複数のコールバックを追加できます。それぞれ同じ引数で呼び出されます。

2. 複数の .catch

var p = new Promise((resolve, deny) => {
  Promise.reject(Error('失敗しました!')) を返します
})
p.catch(エラー => console.log(エラー.メッセージ))
p.catch(エラー => console.log(エラー.メッセージ))

上記のコードの出力は何でしょうか?正しい答えを選択してください:

  • [ ] メッセージを1回印刷する
  • [ ] メッセージを2回印刷する
  • [x]未処理のPromise拒否警告
  • [ ] プログラム終了

分析:

Promise コンストラクターを使用する場合は、resolve() または reject() コールバックのいずれかを呼び出す必要があります。 Promise コンストラクターは戻り値を使用しないため、実際には Promise.reject() によって作成された別の Promise を受け取ることはありません。

Promise.reject() の後に .catch がない場合、答えは UnhandledPromiseRejectionWarning です。

3. .then と .catch の連鎖

var p = new Promise((resolve, deny) => {
    拒否(エラー('失敗しました!'))
  })
  .catch(エラー => console.log(エラー))
  .then(エラー => console.log(エラー))

上記のコードの出力は何でしょうか?正しい答えを選択してください:

  • [x] 印刷エラーと未定義
  • [ ] 2回印刷エラー
  • [ ]未処理のPromise拒否警告
  • [ ]未定義

分析

.then と .catch を連鎖させるときは、それらを一連のステップとして考えると便利です。各 .t​​hen は、前の .then によって返された値を引数として受け取ります。ただし、「step」でエラーが発生した場合、後続の .then 「step」は .catch に遭遇するまでスキップされます。エラーを上書きしたい場合は、エラー以外の値を返すだけです。後続の .then を介してアクセスできます。

ヒント: console.log() は常に undefined を返します。

4. リンクキャッチ

var p = new Promise((resolve, deny) => {
    拒否(エラー('失敗しました!'))
  })
  .catch(エラー => console.log(エラー.メッセージ))
  .catch(エラー => console.log(エラー.メッセージ))

上記のコードの出力は何でしょうか?正しい答えを選択してください:

  • [x] エラーメッセージを1回印刷する
  • [ ] エラーメッセージを2回印刷する
  • [ ] 未処理のPromise拒否警告
  • [ ] プログラム終了

分析

.catch を連鎖させると、それぞれは前の .then または `.catch "ステップ" で発生したエラーのみを処理します。この例では、最初の .catch は console.log を返しますが、これには 2 つの .catch の後に .then() を追加することによってのみアクセスできます。

5. 複数の .catch

新しい Promise((resolve, 拒否) => {
    解決します('成功しました!')
  })
  .then(() => {
    throw Error('Oh noes!')
  })
  .catch(エラー => {
    「実は、うまくいきました」と返します
  })
  .catch(エラー => console.log(エラー.メッセージ))

上記のコードの出力は何でしょうか?正しい答えを選択してください:

  • [ ] メッセージを印刷する
  • [ ] メッセージを2回印刷する
  • [ ] 未処理のPromise拒否警告
  • [x] 何も印刷しない

分析

ヒント: .catch は通常の値を返すことでエラーを無視 (または上書き) することができます。

このトリックは、後続の .then が値を受け取った場合にのみ機能します。

6..次に処理する

Promise.resolve('成功しました!')
  .then(データ => {
    data.toUpperCase() を返す
  })
  .then(データ => {
    コンソール.log(データ)
  })

上記のコードの出力は何でしょうか?正しい答えを選択してください:

  • [ ] 「成功!」と「SUCCESS!」を印刷します。
  • [ ] 「成功しました!」と印刷します。
  • [x] 「成功!」と印刷します。
  • [ ] 何も印刷しない

分析

ヒント: .then は、戻り値から次の .then(value => /* ハンドル値 */) にデータを順番に渡します。

次の .then に値を渡すには、return が鍵となります。

7..次に処理する

Promise.resolve('成功しました!')
  .then(データ => {
    data.toUpperCase() を返す
  })
  .then(データ => {
    コンソール.log(データ)
    データを返す
  })
  .then(コンソール.log)

上記のコードの出力は何でしょうか?正しい答えを選択してください:

  • [ ] 「成功!」を印刷します。
  • [ ] 「成功しました!」と印刷します。
  • [x] 「SUCCESS!」と「SUCCESS!」を印刷します。
  • [ ] 何も印刷しない

分析:

呼び出される console.log 呼び出しが 2 つあります。

8..次に処理する

Promise.resolve('成功しました!')
  .then(データ => {
    データ.toUpperCase()
  })
  .then(データ => {
    コンソール.log(データ)
  })

上記のコードの出力は何でしょうか?正しい答えを選択してください:

  • [ ] 「成功!」と印刷します。
  • [ ] 「成功しました!」と印刷します。
  • [ ] 「SUCCESS!」と「SUCCESS!」を出力します。
  • [x] 未定義を印刷

分析:

ヒント: .then は、戻り値から次の .then(value => /* ハンドル値 */) にデータを順番に渡します。

次の .then に値を渡すには、return が鍵となります。

9. .then と .catch 間のフロー

Promise.resolve('成功しました!')
  .then(() => {
    throw Error('Oh noes!')
  })
  .catch(エラー => {
    「実は、うまくいきました」と返答する
  })
  .then(データ => {
    throw Error('失敗しました!')
  })
  .catch(エラー => console.log(エラー.メッセージ))

上記は、JS Promise の面接の質問 9 つについての詳細です。JS Promise の面接の質問の詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • JavaScript Promise の徹底解説
  • JavaScript における Promise の詳細な説明
  • フロントエンドJavaScriptの約束
  • JS の Promise に中止関数を追加する方法
  • JavaScriptのPromiseを徹底的に理解する

<<:  Linux での Docker と portainer の設定方法

>>:  MySQL の条件文で 1 つの情報しか読み取れない問題に対する 2 つの解決策

推薦する

MySQLの高可用性アーキテクチャの詳細な説明

目次導入MySQL 高可用性マスター 1 つとバックアップ 1 つ: MySQL マスター スレーブ...

Vue 親子コンポーネントの相互値の転送と呼び出し

目次1. 親が子コンポーネントに値を渡す2. 子コンポーネントが親コンポーネントに値を渡す3. 子コ...

ネイティブ JS カプセル化 vue タブ切り替え効果

この記事の例では、ネイティブJSカプセル化vueタブ切り替えの具体的なコードを参考までに共有していま...

Bootstrapグリッドの垂直および水平配置の詳細な説明

目次1. Bootstrap グリッドレイアウト2. 垂直方向の配置2.1 行タグの垂直方向の配置を...

データベースクエリ、どのオブジェクトにどのフィールドが含まれているか、メソッドステートメント

データベースは、どのオブジェクトにどのフィールドが含まれているかを照会します。 *を選択 sysob...

SpringbootはDockerデプロイメントを統合し、Dockerイメージを構築する2つの方法を実装します。

Docker は、あらゆるアプリケーション用の軽量でポータブルな自己完結型コンテナーを簡単に作成で...

Linux コマンドラインでメールを送信する 5 つの方法 (推奨)

シェル スクリプトで電子メールを作成する必要がある場合は、コマンド ラインから電子メールを送信する知...

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例

MySQL SQL ステートメントのパフォーマンス チューニングの簡単な例サーバー開発を行う際には、...

Vueはv-modelを使用してel-paginationコンポーネントのプロセス全体をカプセル化します。

v-model を使用してページング情報オブジェクトをバインドします。ページング情報オブジェクトに...

Divの境界と透明度に関する設定

フレーム:スタイル=”border-style:solid;border-width:5px;bor...

数字当てゲームを実装するための純粋なJavaScript

100 以内の自然数をランダムに選択し、プレイヤーに 10 ラウンド以内にその数を推測させる数字推...

Windows10 HomeバージョンにDockerをインストールするときに発生する問題の概要

Docker ダウンロード アドレス: http://get.daocloud.io/#instal...

ウェブレッスンプラン、初心者向けレッスンプラン

指導トピックウェブページ適用グレード高校2年生授業時間1 クラス教科書分析焦点: 静的および動的ウェ...

テーブルタグ(TAGS)の詳細な紹介

テーブルの基本構文<table>...</table> - テーブルを定義し...

MySQL のマスター スレーブ レプリケーション オプションをオンラインで変更する方法

序文: MySQL で最も一般的に使用されるアーキテクチャは、マスター スレーブ レプリケーションで...