`fetch`でFluture`encaseP`を使用する場合のUnhandledPromiseRejectionWarning

jackdbd

Fluturesを使い始めたばかりで、d3で視覚化するためにいくつかのリモートデータをフェッチしようとしています。

DOMセレクター(例#my-chart)とURL(例https://example.com/data.jsonを受け入れる関数を作成しました

データのフェッチ中にエラーが発生した場合、エラーメッセージを表示する単項関数があります。すべてがうまくいけば、視覚化を描画する単項関数があります。簡単にするために、これらの関数がちょうどconsole.errorとであると仮定しましょうconsole.log

const fn = async (selector, url) => {
// convert fetch (which returns a Promise) into a function that 
returns a Future
const fetchf = Future.encaseP(fetch);

fetchf(url)
  .chain(res => Future.tryP(_ => res.json()))
  .fork(console.error, console.log);
}

fetchこの警告が表示されるため、Futureでラップするときに何かが足りないようです

UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().

使用する必要がある場合はasync/await、次のように記述しますが、警告は表示されません。

const fn = async (selector, url) => {
  let res;
  try {
    res = await fetch(url);
  } catch (err) {
    console.error(err);
    return;
  }
  let data;
  try {
    data = res.json();
  } catch (err) {
    console.error(err);
    return;
  }
  console.log(data);
};
Avaq

ここでは2つのことが起こっているようです。

  1. data.json()関数は内部でラップすることが想定されていないtryP2番目によるので、壊れていない例、それは(なしあり同期返しますawait)。これにより、FlutureはTypeErrorを発生させます(Promiseが表示されることを期待しているが、JSON値を取得するため)。ただし、フェッチAPIを知っていると、data.json()通常Promise返されるため、2番目の例が壊れている可能性があり、他のことが起こっています。それが何であれ、予期しないエラーがどこかにスローされているのではないかと思います。投稿したもの以外に、コンソールに他のエラーメッセージが表示されますか?
  2. 私はいくつかのテストを行いましたが、それは本当のようです-成功した後にFlutureがTypeErrorを発生またはキャッチするencasePと、元のPromiseがそのエラーをキャッチし、未処理の拒否をトリガーしたようです。これはFlutureのリグレッションバグのようで、まもなく修正する予定です。それまでの間、エラーの原因を突き止めれば、上記の修正に依存せずに続行できます。

編集:2番目の問題を修正するためにPRを開きました:https//github.com/fluture-js/Fluture/pull/310

EDIT2:修正はバージョン10.3.1でリリースされました。そのバージョンを使用すると、問題で何が起こっているかについてより多くの洞察が得られるはずです1

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

JPAとHibernateを使用する場合のJOINとJOIN FETCHの違いは何ですか

分類Dev

Rooを使用する場合のnil:NilClassの未定義メソッド `fetch_value '

分類Dev

Fetch APIを使用した場合の「結果」とは何ですか?

分類Dev

MySQLでCURSORを処理する場合、FETCH NEXTとFETCH(NEXTなし)の違いは何ですか?

分類Dev

関連する列で合計を使用する場合のArithmeticError

分類Dev

SQLで「IS」を使用する場合と「=」を使用する場合

分類Dev

「Promise」を使用する場合と「Promise」を使用しない場合:どちらの場合ですか?

分類Dev

Swiftinitで自己を使用する場合と使用しない場合の違い

分類Dev

Android統合テストでWireMockを使用する場合のNoSuchMethodError

分類Dev

vaadinでSpringBootを使用する場合のjsファイルの場合は404

分類Dev

vaadinでSpringBootを使用する場合のjsファイルの場合は404

分類Dev

CDを使用する場合の/の使用

分類Dev

論理AND演算子&&でletを使用する場合のSwiftの使用

分類Dev

MSAccessでDLookupを使用する場合のNullの無効な使用

分類Dev

@JsonPropertyを使用する場合、@ JsonCreatorの使用は必要ですか?

分類Dev

rscalaを使用してRでScalaを使用する場合のNoSuchMethodError

分類Dev

この場合、なぜBufferedReaderを使用するのですか?

分類Dev

この場合、なぜmemsetを使用するのですか?

分類Dev

現在の行の値でfillna()を使用する場合のSettingWithCopyWarning

分類Dev

春の選択の場所で「=」ではなく「in」を使用する場合の例外

分類Dev

Rでforeachを使用する場合のCPU使用率

分類Dev

SQLCommand / Connectionを使用する場合の使用

分類Dev

ScalaでOptionを使用する場合と使用しない場合

分類Dev

Linuxでncursesを使用する場合の未定義の参照

分類Dev

GAEでjavapnsを使用する場合のSSLSocketImpl.receivedChangeCipherSpecのNoSuchMethodError例外

分類Dev

Sparkでjoin()を使用する場合の値の重複

分類Dev

then partcoqで式= trueの場合の証明を使用する

分類Dev

RecyclerViewでGridLayoutManagerを使用する場合のAdMobの問題

分類Dev

GridSearchCVでsklearnのBaggingClassifierを使用する場合のZeroDivisionError

Related 関連記事

  1. 1

    JPAとHibernateを使用する場合のJOINとJOIN FETCHの違いは何ですか

  2. 2

    Rooを使用する場合のnil:NilClassの未定義メソッド `fetch_value '

  3. 3

    Fetch APIを使用した場合の「結果」とは何ですか?

  4. 4

    MySQLでCURSORを処理する場合、FETCH NEXTとFETCH(NEXTなし)の違いは何ですか?

  5. 5

    関連する列で合計を使用する場合のArithmeticError

  6. 6

    SQLで「IS」を使用する場合と「=」を使用する場合

  7. 7

    「Promise」を使用する場合と「Promise」を使用しない場合:どちらの場合ですか?

  8. 8

    Swiftinitで自己を使用する場合と使用しない場合の違い

  9. 9

    Android統合テストでWireMockを使用する場合のNoSuchMethodError

  10. 10

    vaadinでSpringBootを使用する場合のjsファイルの場合は404

  11. 11

    vaadinでSpringBootを使用する場合のjsファイルの場合は404

  12. 12

    CDを使用する場合の/の使用

  13. 13

    論理AND演算子&&でletを使用する場合のSwiftの使用

  14. 14

    MSAccessでDLookupを使用する場合のNullの無効な使用

  15. 15

    @JsonPropertyを使用する場合、@ JsonCreatorの使用は必要ですか?

  16. 16

    rscalaを使用してRでScalaを使用する場合のNoSuchMethodError

  17. 17

    この場合、なぜBufferedReaderを使用するのですか?

  18. 18

    この場合、なぜmemsetを使用するのですか?

  19. 19

    現在の行の値でfillna()を使用する場合のSettingWithCopyWarning

  20. 20

    春の選択の場所で「=」ではなく「in」を使用する場合の例外

  21. 21

    Rでforeachを使用する場合のCPU使用率

  22. 22

    SQLCommand / Connectionを使用する場合の使用

  23. 23

    ScalaでOptionを使用する場合と使用しない場合

  24. 24

    Linuxでncursesを使用する場合の未定義の参照

  25. 25

    GAEでjavapnsを使用する場合のSSLSocketImpl.receivedChangeCipherSpecのNoSuchMethodError例外

  26. 26

    Sparkでjoin()を使用する場合の値の重複

  27. 27

    then partcoqで式= trueの場合の証明を使用する

  28. 28

    RecyclerViewでGridLayoutManagerを使用する場合のAdMobの問題

  29. 29

    GridSearchCVでsklearnのBaggingClassifierを使用する場合のZeroDivisionError

ホットタグ

アーカイブ