Как подробно описано в коде комментария ниже, ваш журнал находится после вашего возвращения и поэтому никогда не будет выполнен.
Также вы не использовали await в асинхронной функции, поэтому либо не делайте ее асинхронной, либо используйте await.
csv.upsert = async function (values, condition) {
const obj = await csv.findOne({ where: condition });
// you can await here, no need for then as you are in an async function
if (obj) { // update
// you need to log before your return condition
console.log("existing record updated")
return obj.update(values);
// since we return here, the rest of the code will not be executed
// you can skip the use of else
}
// we are in this part of the code only if object is falsy
// insert
console.log("new record inserted")
return csv.create(values);
}
Вы также можете использовать Promise.all
, чтобы убедиться, что все upsert выполнены:
await Promise.all(dataToBeInserted.map(async function (data) {
let condition = {
'categorygroup': data.categorygroup,
'category': data.category,
'country': data.country,
'city': data.city
};
await csvModel.upsert(data, condition);
}))
это также гарантирует, что в случае возникновения ошибки она будет перехвачена вашим try / catch
Может быть, это поможет вам найти причину неожиданного поведения.
Это - одна из Euler проблем Проекта. Когда я решил его в Haskell, я сделал точно, что Вы предлагаете, преобразовываете число в Строку. Это затем тривиально, чтобы проверить, что строка является палиндромом. Если это работает достаточно хорошо, то почему беспокойство, делающее это более сложный? Быть палиндромом является лексическим свойством, а не математическим.
Для любого данного числа:
n = num;
rev = 0;
while (num > 0)
{
dig = num % 10;
rev = rev * 10 + dig;
num = num / 10;
}
Если n == rev
затем num
палиндром:
cout << "Number " << (n == rev ? "IS" : "IS NOT") << " a palindrome" << endl;
int is_palindrome(unsigned long orig)
{
unsigned long reversed = 0, n = orig;
while (n > 0)
{
reversed = reversed * 10 + n % 10;
n /= 10;
}
return orig == reversed;
}
def ReverseNumber(n, partial=0):
if n == 0:
return partial
return ReverseNumber(n // 10, partial * 10 + n % 10)
trial = 123454321
if ReverseNumber(trial) == trial:
print("It's a Palindrome!")
Работы для целых чисел только. Неясно от проблемного оператора, если числа с плавающей точкой или начальные нули нужно рассмотреть.
Только для забавы, этот также работает.
a = num;
b = 0;
if (a % 10 == 0)
return a == 0;
do {
b = 10 * b + a % 10;
if (a == b)
return true;
a = a / 10;
} while (a > b);
return a == b;
Продвиньте каждую отдельную цифру на стек, затем вытолкайте их прочь. Если это - те же форварды и назад, это - палиндром.
Поп от первых и последних цифр и сравнивает их, пока Вы не выбегаете. Может быть цифра, оставленная, или нет, но так или иначе, если весь вытолканный от соответствия цифр, это - палиндром.
Я ответил на Euler проблему с помощью очень грубого-forcy пути. Естественно, был намного более умный алгоритм в дисплее, когда я добрался до нового разблокированного связанного потока форума. А именно, у участника, который прошел мимо дескриптора Begoner, был такой новый подход, что я решил повторно реализовать свое решение с помощью его алгоритма. Его версия была в Python (использующий вложенные циклы), и я повторно реализовал его в Clojure (использующий сингл, циклично выполняются/повторяются).
Здесь для Вашего развлечения:
(defn palindrome? [n]
(let [len (count n)]
(and
(= (first n) (last n))
(or (>= 1 (count n))
(palindrome? (. n (substring 1 (dec len))))))))
(defn begoners-palindrome []
(loop [mx 0
mxI 0
mxJ 0
i 999
j 990]
(if (> i 100)
(let [product (* i j)]
(if (and (> product mx) (palindrome? (str product)))
(recur product i j
(if (> j 100) i (dec i))
(if (> j 100) (- j 11) 990))
(recur mx mxI mxJ
(if (> j 100) i (dec i))
(if (> j 100) (- j 11) 990))))
mx)))
(time (prn (begoners-palindrome)))
Также были ответы языка Common LISP, но они были ungrokable мне.
Вот версия схемы, которая создает функцию, которая будет работать с любой базой. У него есть проверка на избыточность: быстро вернуть false, если число кратно основному (заканчивается на 0).
И он восстанавливает не все перевернутое число, а только половину.
Это все, что нам нужно.
(define make-palindrome-tester
(lambda (base)
(lambda (n)
(cond
((= 0 (modulo n base)) #f)
(else
(letrec
((Q (lambda (h t)
(cond
((< h t) #f)
((= h t) #t)
(else
(let*
((h2 (quotient h base))
(m (- h (* h2 base))))
(cond
((= h2 t) #t)
(else
(Q h2 (+ (* base t) m))))))))))
(Q n 0)))))))