今のところ、try/catchブロックがまったく機能するかどうかは私には謎です。私はそれらをコードの周りに設定しましたが、コード内の何かが「非同期」であったため、OSレベルで別のスレッド/プロセスにフォークされたと言うための派手な方法のように見えるため、その中で発生した場合、try/catchは無視されますコード。
私はそれで大丈夫です、私はこれの何らかの兆候があるかどうか知りたいだけですか?慣例により、呼び出しがコールバックを要求する場合、それはasychであり、そうでない場合はそうではないことを理解するように与えられています。コールバックがasychを意味する理由はわかりますが、その逆が常に当てはまるとは限らないのではないかと思います。新しいコールスタックに読み込まれ、要求しないtry/catchでコールを囲むことを妨げるものは何もありません。コールバック。これは私には本当に厄介なように思えます。可能であれば、キャッチされなかったすべての例外が処理されるデフォルトのコールバックを使用するよりも、try/catchをもう少し制御したいと思います。
- コードが現在のスタックを離れるタイミングを教えてくれるセマンティクスはありますか?
更新:ここに例があります:
var UserSchema = new mongoose.Schema({
email: {type: String, unique: true},
password: String,
firstName: String,
lastName: String,
created_at: {type: Date, default: Date.now},
updated_at: Date
});
var User = mongoose.model('User', UserSchema);
var users = [
{email: 'foo@bar.com', firstName: 'Justin', lastName: 'Jones'},
{email: 'foo@bar.com', firstName: 'Justin', lastName: 'Jones'}
];
users.forEach(function(user) {
var newUser = new User(user);
newUser.save(function(err, obj) {
if (!err) console.log("Saved: ", obj.email);
});
});
上記のコードを考えると、別の呼び出しスタックで発生するため、save()内で例外をキャッチする方法はありません。save()を呼び出したときに何が起こっているのかを外部から知る方法はありますか?
更新:これにハンドラーを使用するように私に言っている人は、おそらくこれを読むべきですか?スレッドのようにしか機能しないため、「スレッドの実行」に含まれない例外を処理しないことを明確に示唆しています。