Я пытаюсь написать «проверку валидатора», запрашивая мою базу данных, если доступна запрошенная строка.Обещанная рекурсивная функция не запускает оператор return
Для этого я использую un reccursive функцию, которая увеличивает число и проверяет ее на конкатенацию с моей пробитой строкой.
Пример:
- Я хочу, чтобы вставить
my-slugged-string
в моей базе данных. Я хочу проверить, есть лиmy-slugged-string
(еще не используется). - я запрашиваю свою базу данных с
my-slugged-string
и если он уже существует, пытается сноваmy-slugged-string1
, и если он уже существует пытается снова сmy-slugged-string2
и т.д ... - Если
my-slugged-stringx
не существует, возвращает это значение.
Прежде всего, вот мой код
import nodeGremlin from 'gremlin';
import gremlin from 'gremlin-template-string';
import slug from 'slug';
import Promise from 'bluebird';
let client = nodeGremlin.createClient(8182, 'localhost');
client = Promise.promisifyAll(client);
module.exports.generateNew = function (label, stringToSlug) {
let sluggedString = slug(stringToSlug, {lower: true});
return findAvailable(label, sluggedString);
}
function findAvailable(label, stringToTest, i = ''){
const mixedString = stringToTest + i;
let query = `g.V().has(label, '${label}').has('slug', '${mixedString}')`;
return client.executeAsync(query)
.then((item) => {
if (item[0]){
if (i === '') i = 0;
return findAvailable(label, stringToTest, ++i);
}
// breakpoint
console.log(mixedString);
return mixedString;
})
.catch((err) => {
// manage error
});
}
И я звоню этот код, как этот
import * as Slug from './slug';
import Promise from 'bluebird';
let slug = Promise.promisifyAll(Slug);
export function create(item = {}, callback) {
// [...]
slug.generateNewAsync('item', 'my string to slug and test')
.then((sluggedstring)=>{
//bla bla bla
})
// [...]
}
Моя проблема заключается в том, что, даже если достигается точка останова (алгоритм работает, я уже тестировал его: я могу console.log
правильное значение), ничего не будет возвращено, и процесс не остановится и продолжит выполнение для eeeveeer ... пока не наступит тайм-аут! :) :) :)
Возможно, у меня что-то есть в принципе обещаний javascript.
Я appriciate ваших помощи, ребята;)
EDIT: благодаря @Adam, код отредактировал
в вашей 'функции findAvailable' вы не' 'return' с client.executeAsync (запрос) ... ' – Adam
OMG какая глупая ошибка. Но добавление 'return' с' client.executeAsync (query) ... 'делает точно то же самое. –