У меня есть функция, которая ожидает один аргумент как функции, так и класса, и я должен выполнять разные действия для каждого из двух.Определить, является ли аргумент классом (реализация обещаний +) или вызываемой функцией
Пример псевдокода:
function myFunction(callback) {
if (/* callback is a Promise class */) {
return new callback(function (resolve, reject) {
// logic
resolve();
});
} else if (/* callback is a callable function */) {
// logic
callback(); // Realistically this would not be called at the end of logic block.
} else {
// throw error
}
}
Я хотел бы предложить поддержку для произвольной библиотеки Promise реализации А + стандарт, поэтому разработчик может передать то, что реализация они уже используют и не выполнять никаких обходных путей или использовать мою реализацию. Имейте в виду, что я не говорю о собственных реализациях в современных виртуальных машинах, но я также нацелен на other implementations. Опция вызываемой функции существует как резерв, если разработчик не хочет (хочет) использовать библиотеку Promise. Надеюсь, это объяснение имеет смысл.
Из того, что я пробовал, я всегда получаю такой же результат как для класса, так и для вызываемой функции, поскольку классы в JavaScript - это просто функции. Единственным обходным решением, которое я смог сделать, является проверка callback.length
, но эта функциональность очень хрупок и, скорее всего, будет ломаться в любом реальном случае использования.
В JavaScript нет такой вещи, как «класс». Что вы подразумеваете под «классом» здесь? – Pointy
@Пожалуйста, прочитайте полный вопрос. В принципе, я хочу знать, могу ли я создать экземпляр аргумента или вызвать его. –
Пожалуйста, просто сделайте лучший интерфейс, который не должен решить эту запутанную проблему. Подобно другому аргументу, который указывает, как должен обрабатываться аргумент обратного вызова. Или передайте объект со свойствами, которые указывают, что это такое. В основном вы создали запутанный интерфейс, и именно поэтому у вас есть эта проблема. – jfriend00