В моем приложении Node.JS я написал функцию (findByReference
), которая отправляется в базу данных и асинхронно выдает извлеченную строку базы данных.Я написал эту функцию с помощью обещаний.Кроме того, я написал реализацию монады Maybe
и хочу, чтобы моя функция findByReference
выдавала экземпляр Maybe
.
Мой код выглядит следующим образом:
findByReference(r)
.then(raw => raw ? Just(raw) : Nothing())
.then(row => {
(row instanceof Maybe) === true;
});
Не вдаваясь в то, что означают Just
и Nothing
, значение этого (из-за того, как я написал Maybe
) состоит в том, что переменная row
в приведенном выше коде имеет функцию под названием"затем" .Короче говоря, кажется, что Javascript запутывается и по какой-то причине автоматически вызывает МОЕ «затем» и вместо передачи Maybe
фактически передает обратному вызову то, что МОЕ «затем» возвращает в качестве значения row
.Это явно приводит к всевозможным странным действиям.Если я просто удаляю функцию «then» из моего объекта, то все это работает, как и ожидалось.
Я знаю, что если Promise.then
вернет другое Promise, то выполнение будет приостановлено до тех пор, пока это обещание не будет выполнено.Я не смог найти никакой официальной документации, подтверждающей это, но это тот случай, когда это решение просто основано на существовании функции «тогда» (самое близкое, что я нашел, это https://developers.google.com/web/fundamentals/primers/promises, который ссылается нак возвращаемому значению как «что-то вроде обещания»).Если это так, то насколько я понимаю, что «затем» как имя функции - это в основном зарезервированное слово в Javascript?Я видел другие реализации Maybe (такие как https://www.npmjs.com/package/data.maybe), в которых для аналогичной вещи используется слово «цепочка» - мне было интересно, почему это так?
Может кто-нибудь пролить свет намой вывод здесь правильный, и если да, то есть ли какой-нибудь обходной путь, который я могу использовать, кроме переименования моей функции?
К вашему сведению, единственный другой ТАК вопрос, который я нашел, который касается этой проблемы, - этот - Решить обещаниес объектом с функцией «then» - но поскольку это зависит от угла, я не верю, что это дублирование.
Заранее спасибо!