Bandicoot
@Bandicoot
Вась-программист

Как заставить этот код с коллбэком вернуть логическое значение?

Хочу сделать так, чтобы эта функция возвращала логическое значение (true - если запись в таблице найдена, false в противном случае):
function existsEntry(postId){
	db.serialize(function(){
		db.get("SELECT * FROM posts WHERE post_id = ?", [postId], function(err, row){
			if (err) throw err;
            console.log(row);
		});

		db.close();
	});
}

console.log(existsEntry("21706"));

Но она вполне ожидаемо выводит undefined в любом случае. Как изменить ее работу? Я новичок в Ноде
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
Никак.
Единственное, что может вернуть асинхронная функция - Promise, то есть - обещание, что в какой-то момент времени будет получено какое-то значение.
function existsEntry(postId){
  return new Promise(function (resolve, reject) {
    db.serialize(function(){
      db.get("SELECT * FROM posts WHERE post_id = ?", [postId], function(err, row){
        if (err) {
          resolve(false); // или reject()
        } else {
          resolve(true);
        }
      });

      db.close();
    });
  });
}

existsEntry("21706").then(function (answer) {console.log(answer)});

Как только у вас появляется асинхронная функция, весь остальной код, работающий с ней, тоже обязательно должен стать асинхронным и вы можете забыть слова "вернуть результат работы функции"
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы