Перечитал много раз ответы на вопрос Почему появляется ошибка undefined?
Но так и не нашел для себя отгадку
Я только изучаю язык, помогите, пожалуйста, разобраться
Есть тест:
describe('Wait Test', () => {
it('should wait for true "false"', () => {
const wait = new Wait()
return wait.forTrue(() => false, 5, 1000, 0).then((result) => assert.isFalse(result))
})
В нем вызываются методы и функции класса Wait:
const logger = require('./log.util')
const doWait = (action, interval, expectedValue) => {
return new Promise((resolve, reject) => {
if (action() === expectedValue) {
setTimeout(() => resolve(), interval)
} else {
setTimeout(() => reject(() => {
return action()
}), interval)
}
})
}
const retrier = async (action, maxCount, interval, count, forFunction, expectedValue) => {
count++
logger.info(`[${count}] Wait for true`)
return doWait(action, interval, expectedValue).then(() => {
logger.info('Was able to reach expected condition!')
return true
}, () => {
if (maxCount <= count) {
logger.warning('Was not able to reach expected condition!')
logger.warning(`[${text}] -> last data from action(): ` + action())
return false
} else {
return forFunction(action, maxCount, interval, count)
}
})
}
class Wait {
forTrue (action, maxCount, interval, count = 0) {
return retrier(action, maxCount, interval, count, this.forTrue, true)
};
}
И получается в итоге (в строке return retrier(action, maxCount, interval, count, this.forTrue, true)) такая ошибка
1) Wait Test
should wait for true "false":
TypeError: Cannot read property 'forTrue' of undefined
at forTrue (utils/wait.util.js:34:60)
at doWait.then (utils/wait.util.js:27:14)
Не могли бы подсказать, что не так и объяснить поему надо именно так
спасибо
class Wait {
forTrue (
у вас сделаны, как класс и метод. В метод автоматически не передается контекст this. Надо сделать либо:
class Wait {
constructor() {
this.forTrue = this.forTrue.bind(this);
}
forTrue (....) {
....
}
}
либо сделать метод стрелочной функцией:
class Wait {
forTrue = (....) => {
....
};
}
class Wait {
forTrue (action, maxCount, interval, count = 0) {
return retrier(action, maxCount, interval, count, this.forTrue.bind(this), true)
};
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Подскажите пожалуйста Что я хочу сделать, следующий сценарий
Есть массив данных, который необходимо преобразовать в дерево:
Пытаюсь вывести орред бук через вебсокеты битфинекса, но в консоли получаю ошибку
Подскажите пожалуйста как реализовать такую возможность: Чтобы когда нажималась кнопка Войти в комнату, уже открытая комната закрывалась?...