Nodejs非同期コールの異常処理例分析
2259 ワード
本論文の実例は、Nodejs非同期の異常な処理について述べている.皆さんに参考にしてあげます.具体的には以下の通りです.
現在私達のプロジェクトのNodejs異常はexpress nextを通じてerrorhandlerの中間部品に処理されました.
この方法ですべての異常を捕獲できるが、事実はそうではないことが分かった.
以下に異常例を示します.
上のコードの運行結果から見ても、私達の予想に合致します.
もし場所を変えて異常を投げたら、結果は私達が欲しいものではないです.
1.Promise
次のように書くなら
ここで述べたように、皆さんのnodejsプログラムの設計に役に立ちます.
現在私達のプロジェクトのNodejs異常はexpress nextを通じてerrorhandlerの中間部品に処理されました.
この方法ですべての異常を捕獲できるが、事実はそうではないことが分かった.
以下に異常例を示します.
req.get('',function(req, res, next){
var a = undefined.b; // exception
})
req.use(function(){req, res, next}{
next(); // errorhandler
})
上記の例では、私たちは人間的にexcepteinonを作りました.同時に私たちが期待している結果は、私たちが書いたhandlerに異常に入ることができます.上のコードの運行結果から見ても、私達の予想に合致します.
もし場所を変えて異常を投げたら、結果は私達が欲しいものではないです.
req.get('',function(req, res, next){
redis.get('key', function(){
var a = undefined.b; // exception
})
})
req.use(function(){req, res, next}{
next(); // errorhandler
})
上のコードから投げられた異常はexpressに捕獲されません.またnextは私達のエラープロセッサに送られません.下のコードで捕獲されます.
process.on('uncaughtException', uncaughtExceptionHandler);
したがって、nodejsでは、非同期の異常は、周辺のtry catchに捕獲されない.
req.get('',function(req, res, next){
try{
redis.get('key', function(){
var a = undefined.b; // exception
})
}catch(e){
//
}
})
ソリューション:1.Promise
function promiseFun() {
return new Promise(function (resolve, reject) {
redis.get('key', function(){
resolve("Hello");
// reject();
})
})
}
promiseFun().then().catch();
2.Aync await
var getAsync1 = await async1();
async function async1() {
return new Promise(function (resolve, reject) {
redis.get('key', function(){
resolve("Hello");
// reject();
})
});
}
console.log(getAsync1);
But…次のように書くなら
function promiseFun() {
return new Promise(function (resolve, reject) {
redis.get('key', function(){
throw Error(); //
})
})
}
promiseFun().then().catch();
まだ捕まらない.ここで述べたように、皆さんのnodejsプログラムの設計に役に立ちます.