未処理のプロミス拒否とは何ですか? 質問する

未処理のプロミス拒否とは何ですか? 質問する

Angular 2 を学習するために、チュートリアルを試しています。

次のようなエラーが発生します:

(node:4796) UnhandledPromiseRejectionWarning: Unhandled promise rejection (r                                                                                                     ejection id: 1): Error: spawn cmd ENOENT
[1] (node:4796) DeprecationWarning: Unhandled promise rejections are deprecated.
In the future, promise rejections that are not handled will terminate the Node.
js process with a non-zero exit code.

SO でさまざまな質問と回答を調べましたが、「Unhandled Promise Rejection」が何であるかがわかりません。

誰か、これが何なのかError: spawn cmd ENOENT、いつ発生するのか、この警告を取り除くために何をチェックする必要があるのか​​を簡単に説明してもらえませんか?

ベストアンサー1

このエラーの原因は、すべての Promise が Promise の拒否を処理すること、つまり.catch(...)を持つことが期待されているという事実にあります。以下に示すように、コード内の Promise に.catch(...)を追加することで、これを回避できます。

例えば、関数PTest()は、グローバル変数somevarの値に基づいてpromiseを解決するか拒否するかを決定します。

var somevar = false;
var PTest = function () {
    return new Promise(function (resolve, reject) {
        if (somevar === true)
            resolve();
        else
            reject();
    });
}
var myfunc = PTest();
myfunc.then(function () {
     console.log("Promise Resolved");
}).catch(function () {
     console.log("Promise Rejected");
});

場合によっては、 Promise に .catch(..) が記述されていても、 「未処理の Promise 拒否」メッセージが表示されることがあります。これは、コードの記述方法にかかっています。次のコードは、処理しているにもかかわらず、「未処理の Promise 拒否」メッセージを生成しますcatch

var somevar = false;
var PTest = function () {
    return new Promise(function (resolve, reject) {
        if (somevar === true)
            resolve();
        else
            reject();
    });
}
var myfunc = PTest();
myfunc.then(function () {
     console.log("Promise Resolved");
});
// See the Difference here
myfunc.catch(function () {
     console.log("Promise Rejected");
});

違いは、.catch(...)チェーンとしてではなく、個別に処理することです。何らかの理由で、JavaScript エンジンは、未処理のプロミス拒否なしで、これをプロミスとして扱います。

おすすめ記事