関数を受け取り、その関数の "async-style"バージョンを返す汎用ラッパーを書くのが大好きですIFこれは非同期ではありませんでした。関数を非同期スタイルに調和させる汎用ラッパー
問題は、呼び出しが同期か非同期かを簡単に知ることができないことです。だから...これは基本的に「できない」。右?
(ラッパーは非同期スタイルに同期機能を調和し、単独の非同期機能をLEAVE必要があることに注意してください)
var wrapper = function(fn){
return function(){
var args = Array.prototype.splice.call(arguments, 0);
var cb = args[ args.length - 1 ];
// ?!?!?!?!?
// I cannot actually tell if `fn` is sync
// or async, and cannot determine it!
console.log(fn.toString());
}
}
var f1Async = wrapper(function(arg, next){
next(null, 'async' + arg);
})
var f2Sync = wrapper(function(arg){
return 'sync' + arg;
})
f1Async("some", function(err, ret){
console.log(ret);
});
f2Sync("some other", function(err, ret){
console.log(ret);
});
多くの人がノードのコールバック地獄について文句を言っています。コールバックをあまりにも愛していて、関数を同期させるためにコールバックを追加したい人がいるのは興味深いでしょう:) – Dan
最後の引数のパラメータ名を取得するのは興味深いかもしれません。引数をチェックして、標準のコールバックパターンを満たしているかどうかを確認できます。 http://stackoverflow.com/questions/1007981/how-to-get-function-parameter-names-values-dynamically-from-javascript – Dan
@Plato明示的に渡さずに外部から関数の引数をチェックする方法を教えてください。関数の引数を渡す必要があります。どう思いますか ? – user568109