Итак, я пытаюсь написать HOC для ведения журнала, который возьмет функцию и запишет результат этой функции.Я хотел бы, чтобы этот hoc мог регистрировать результат любой функции, независимо от того, возвращает ли эта функция обещание или значение.Это то, что у меня есть:
const logFn = (x) => {
return (...args) => {
const result = x(...args);
console.log(`result: ${result}`);
return result;
}
};
Я бы хотел, чтобы эта функция обрабатывала случай, когда x возвращает обещание.Я знаю хакерский способ сделать это (typeof result === object && typeof result.then === function)
, но это кажется хрупким.Я почти уверен, что есть более элегантный способ сделать это, но я изо всех сил пытаюсь его найти.
Я включил нижеприведенный тест шутки ниже:
import logFn from './logFn';
describe('logFn', () => {
let outputData;
beforeEach(() => {
const storeLog = inputs => (outputData += inputs);
console["log"] = jest.fn(storeLog);
require('./logFn');
outputData = ""
});
it('handles async functions', () => {
const add2P = (x, y) => Promise.resolve(x + y);
const logAdd2 = logFn(add2P);
const expected = add2P(1,2).then((data) => data);
const actual = logAdd2(1,2);
expect(outputData).toBe('result: 3');
expect(actual).toEqual(expected);
})
});
бонусных баллов, если вы можетепомогите мне очистить до каждого.