Я должен передать функцию другой функции и выполнить ее как обратный вызов. Проблема в том, что иногда эта функция асинхронна, например:
async function() {
// Some async actions
}
, поэтому я хочу выполнить await callback()
или callback()
в зависимости от типа функции, которую она получает.
Есть ли способ узнать тип функции ??
Hei,
Вот подход, обеспеченный David Walsh в его сообщение в блоге :
const isAsync = myFunction.constructor.name === "AsyncFunction";
За Ваше здоровье!
В случае, если Вы используете NodeJS 10.x или позже
Использование собственная функция util .
util.types.isAsyncFunction(function foo() {}); // Returns false
util.types.isAsyncFunction(async function foo() {}); // Returns true
Действительно имеют в виду все проблемы от вышеупомянутого ansers все же. Функция, которая просто возвращает случайно обещание, возвратит отрицательный false.
И к тому же (из документов):
Примечание, что это только сообщает, что видит механизм JavaScript; в частности, возвращаемое значение не может соответствовать коду первоисточника, если transpilation инструмент использовался.
, Но если Вы используете async
в NodeJS 10 и никаком transiplation. Это - хорошее решение.
Можно принять в, начинаются, тот обратный вызов является обещанием:
export async function runSyncOrAsync(callback: Function) {
let promisOrValue = callback()
if (promisOrValue instanceof Promise) {
promisOrValue = Promise.resolve(promisOrValue)
}
return promisOrValue;
}
и их в Вашем коде можно сделать это:
await runSyncOrAsync(callback)
, который решит Вашу проблему с незнанием типа обратного вызова....