119

関数を別の関数に渡し、それをコールバックとして実行する必要があります。問題は、この関数が次のように非同期である場合があることです。

async function() {
 // Some async actions
}

だから私はそれが受けている機能の種類に応じawait callback()て実行したい。callback()

関数の型を知る方法はありますか??

4

9 に答える 9

39

ネイティブの非同期関数のみが使用されている限り (通常はそうです)、私は次の単純な方法を好みます。

theFunc.constructor.name == 'AsyncFunction'
于 2018-08-19T19:33:03.153 に答える
30

@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*
    );
}

これは非常に有効な質問であり、誰かが彼に反対票を投じたことに腹を立てています。このタイプのチェックの主な使用例は、ライブラリ/フレームワーク/デコレータです。

これらは初期の段階であり、有効な質問に反対票を投じるべきではありませ

于 2016-11-11T01:15:22.737 に答える
8

以下は、David Walsh がブログ投稿で提供している短くて便利なアプローチです。

const isAsync = myFunction.constructor.name === "AsyncFunction";

乾杯!

于 2019-04-30T06:37:10.520 に答える