Я пытаюсь настроить поле своего объекта в соответствии с записями базы данных. Я проверю свои последние 10-минутные записи моего объекта, а затем, если они такие же, я установлю поле isSame = true, иначе isSame = false. Я делаю это, записывая их в файл .txt, и он отлично работает. Но я не хочу создавать длинный текстовый файл, поэтому сделаю это с записями db.
После создания объекта я отправляю свой объект клиенту.
Я устанавливаю поле своих объектов в моем ts-файле как фиктивные коды:
object.id = 3;
object.prm = 5;
object.isSame = checkSame(); //checkSame is my function which decide whether true or not with log file
sendToClient(object);
Но когда я конвертирую его, чтение db - это асинхронные функции. Так что моя переменная всегда будет неопределенной. Чтобы показать свою проблему, я создал фиктивный проект с той же проблемой. Это строка main.ts:
myObject.type = 0;
var persons = readDb("test");
myObject.persons = persons;
Это функция в базе данных:
export function readDb(personName: string) {
getConnection().connect().then(connection => {connection.getRepository(Person).find({name: personName})
.then(persons => {
console.info(persons);
return persons;
}
)});
}
Если я это сделаю, я смогу привлечь людей к функции readDb, но не к потоку основной программы. Мне нужно возвращаемое значение в потоке моей основной программы. Я пытался:
var persons = null;
async function test() {
const result = await readDb("java");
persons = result;
}
console.info(persons);
Но человек по-прежнему нулевой. Как я могу это сделать? Мне нужно назначить мою переменную в основном потоке программы. Я уже обращаюсь к нему через свою асинхронную функцию, но не могу вернуть его. (Я пробовал вернуть Person [], любой результат и т. д. Все тот же) Как я могу получить возвращаемое значение асинхронной функции в потоке моей основной программы для присвоения его переменной?
На самом деле, как я уже сказал: «Я пробовал вернуть Person [], любой и т. д.» но я пропустил это, когда писал вопрос. Я отредактировал свой вопрос.






Ваша функция readDb ничего не возвращает. Вы await, чтобы он вернул undefined. Это должно сработать:
export function readDb(personName: string) {
return getConnection().connect()
.then(connection => {
connection.getRepository(Person).find({ name: personName })
.then(persons => {
console.info(persons)
return persons
})
})
}
Или используя стиль async / await:
export async function readDb(personName: string) {
const connection = await getConnection().connect()
const persons = await connection.getRepository(Person).find({ name: personName })
console.info(persons)
return persons
}
На самом деле, как я уже сказал: «Я пробовал вернуть Person [], любой и т. д.» но я пропустил это, когда писал вопрос. Я отредактировал свой вопрос. А также я пробовал ваш код, но он такой же. Я вижу в консоли "null".
Насколько я понимаю, вы не возвращаете никаких обещаний от
readDb.