javaScriptを理解できませんpromises
。次のコードを書きました。
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log(e)),5000);
これはChromeデベロッパーコンソールにすぐに表示されます。
しかし、5秒待った後、メッセージは次の画像のように自動的に黒に変わります。
私のjavaScriptコードと開発者コンソールの間でこの動作を見たことはありません。私のJavaScriptスクリプトは、開発者コンソールで「既存のコンテンツを変更」できます。
そこで、resolve
次のコードを記述して、同じ状況が発生するかどうかを確認することにしました。
var p = new Promise(function(resolve,reject){
resolve("hello world");
});
setTimeout(()=>p.then(e=>console.log(e)),5000);
しかし、この状況では、私の開発者コンソールには5秒後まで何も表示されず、そこに出力されhello world
ます。
とが呼び出されるタイミングの点でresolve
とのreject
扱いが異なるのはなぜですか?
追加
私もこのコードを書きました:
var p = new Promise(function(resolve,reject){
reject(Error("hello world"));
});
setTimeout(()=>p.catch(e=>console.log("errors",e)),5000);
setTimeout(()=>p.catch(e=>console.log("errors 2",e)),6000);
setTimeout(()=>p.catch(null),7000);
これにより、開発者コンソールにいくつかの出力が発生します。時間0で赤のエラー、時間5秒でテキストに赤が黒に変わりerrors hello world
、時間6秒で新しいerrors 2 hello world
エラーメッセージ、時間7秒で赤のエラーメッセージ。今私はreject
実際に何回呼び出されるのか非常に混乱しています...私は迷子になっています...
var p = new Promise(function(resolve,reject){ reject(Error("hello world")); });
より慣用的かつ簡潔に次のように書くことができますvar p = Promise.reject(Error("hello world"));
:-)