私は、ノードコールバックにsetImmediateを使用するのが正しいかどうかを明確にしたいと思います。ノードコールバックでsetImmediateが必要なのはいつですか?
私が調査した例/記事では、コールバックが非同期であることを保証するためにsetImmediateを使用することが最善であると主張しています。最も一般的な例は、値が「キャッシュ」に存在する可能性のある場所です。
const getData = function(id,callback) {
const cacheValue = cache[id];
if (cacheValue) {
// DON'T DO THIS ...
return callback(null,cacheValue);
// DO THIS ...
return setImmediate(callback,null,cacheValue);
}
return queryDB(id,function(err,result){
if (err){
return callback(err);
}
return callback(null,result);
});
};
ここでは混乱します。コールバックでのエラーハンドリングのほとんどのノードの例は決してsetImmediateを呼び出すように見えません。
if (err) {
return callback(err);
}
の代わり::上記の私の例から
if (err) {
return setImmediate(callback,err);
}
私はsetImmediate、この場合には必要ではなく、実際にパフォーマンスに影響を与えることができ、なぜこれがあると言ういくつかの引数を読みますか?この例は、キャッシュにアクセスする例と同じではありません。
一貫性があり、常にsetImmediateを使用する方が良いですか?そして、その場合には、理由を次の操作を行いません。(ホスト機能が戻った前に)あなたが「同期コールバックを呼び出している場合
const getData = function(id,callback) {
const cacheValue = cache[id];
if (cacheValue) {
return setImmediate(callback,null,cacheValue);
}
return queryDB(id,function(err,result){
if (err){
return setImmediate(callback,err);
}
return setImmediate(callback,null,result);
});
};
詳細な返信をありがとうございます。さて、あなたはこれを解決する約束を言います。ノードは現在async/awaitをサポートしているので、これは私には別のオプションであると仮定していますか? –
@ClickAhead - はい、 'async/await'は、約束を使用する別の方法です。それを使用するかどうかに関係なく、コールバックを渡すのではなく、インタフェースから約束を返すでしょう。 – jfriend00