node.jsでは、メソッドが同期か非同期かを(関数を使用して)判断できますか?
次のことを行う関数を書きたいと思います。
function isSynchonous(methodName) {
//if the method is synchronous, return true. Otherwise, return false.
}
node.jsでは、メソッドが同期か非同期かを(関数を使用して)判断できますか?
次のことを行う関数を書きたいと思います。
function isSynchonous(methodName) {
//if the method is synchronous, return true. Otherwise, return false.
}
言語の観点からは、これは不可能です。これは、ラムダの答えが証明していると思います。
undefined
他に何もないとしても。エンジニアリングの観点から:
さらに、この 2 つを組み合わせた機能もあります。
function(callback) {
if(ready) {
callback();
}
else {
setTimeout(callback, 5000);
}
}
おそらくこれは非常に悪いことであり、正しい実践は
if(ready) {
process.nextTick(callback);
}
そのため、関数の動作は均一です。
ただし、少なくとも Node.js では、非同期が発生したかどうかを確認するハックな方法があります。このディスカッションを参照してください。
// untested!! please read the documentation on these functions before using yourself
var work = process._getActiveHandles().length + process._getActiveCallbacks().length;
foo;
var newWork = (process._getActiveHandles().length + process._getActiveCallbacks().length) - work;
if(newWork > 0) {
console.log("asynchronous work took place.");
}
これが機能するのは、定義上、非同期作業は同じティックで解決できないためです。また、Node.js はシングル スレッドであるためです。
いいえ、それは不可能です。メソッドは同期または非同期としてマークされているだけでなく、コールバックを使用するか使用しないかのいずれかです。