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 エンジンは、未処理のプロミス拒否なしで、これをプロミスとして扱います。