関数を別の関数に渡し、それをコールバックとして実行する必要があります。問題は、この関数が次のように非同期である場合があることです。
async function() {
// Some async actions
}
だから私はそれが受けている機能の種類に応じawait callback()
て実行したい。callback()
関数の型を知る方法はありますか??
関数を別の関数に渡し、それをコールバックとして実行する必要があります。問題は、この関数が次のように非同期である場合があることです。
async function() {
// Some async actions
}
だから私はそれが受けている機能の種類に応じawait callback()
て実行したい。callback()
関数の型を知る方法はありますか??
ネイティブの非同期関数のみが使用されている限り (通常はそうです)、私は次の単純な方法を好みます。
theFunc.constructor.name == 'AsyncFunction'
@rnd と @estus の両方が正しいです。
しかし、実際に機能するソリューションで質問に答えるには、ここに行きます
function isAsync (func) {
const string = func.toString().trim();
return !!(
// native
string.match(/^async /) ||
// babel (this may change, but hey...)
string.match(/return _ref[^\.]*\.apply/)
// insert your other dirty transpiler check
// there are other more complex situations that maybe require you to check the return line for a *promise*
);
}
これは非常に有効な質問であり、誰かが彼に反対票を投じたことに腹を立てています。このタイプのチェックの主な使用例は、ライブラリ/フレームワーク/デコレータです。
これらは初期の段階であり、有効な質問に反対票を投じるべきではありません。
以下は、David Walsh がブログ投稿で提供している短くて便利なアプローチです。
const isAsync = myFunction.constructor.name === "AsyncFunction";
乾杯!