Я создаю приложение, в котором на конкретном вызове я должен заблокировать и дождаться результатов запроса аутентификации перед тем, как консурировать.nodeJS возвращаемое значение из обратного вызова
function authenticate(userid, hash)
{
mysql_client.query("SELECT `hash` FROM `auth` WHERE `userid` = " + userid, function selectCb(err, results, fields) {
if (err)
{
client.send("Error communicating with mysql, please retry your request");
return false;
}
if(results.length == 0 || results[0].hash != hash)
{
client.send("Error comparing authentication data with database, please retry request");
return false;
}
return true;
}
);
}
Я хочу, чтобы иметь возможность вернуть эти значения из функции Authenticate() сам, а не внутренняя анонимной функции selectCb и имею аутентификации блока до обратного вызова не будет завершен. Как я могу это сделать?
Спасибо, это, кажется интересным решением, однако я еще немного не знаете, как получить значение из этого. Скажем, я хочу, чтобы запрос остановился на этом этапе, если аутентификация завершилась неудачно, в противном случае продолжить приложение. Кажется, что все, что я верну в этом обратном вызове, будет съедено, так как обратные вызовы возвращают значение, поэтому я не смог бы просто вернуть true/false из этого. Как мне это сделать? –
@majicbunnie, если одна часть вашего потока приложений асинхронна, что делает весь асинхронный асинхронный процесс, и вам нужно иметь обратные вызовы, подобные этому, до конца. Чтобы упростить это и сделать ваш код более удобным для работы, вы должны взглянуть на концепцию «фьючерсы» или «обещания». Это избавляет вас от создания безумно-глубоко вложенных обратных вызовов. Если вы его ищете, есть много информации, но вы можете начать здесь: http://howtonode.org/promises – nickf
То же самое с OP. Без использования обещаний или тому подобного, как можно было бы вернуть эти значения из самой функции authenticate(), используя простую программу? Я мог понять решение, но я смутил пример использования. Не похоже, что он отвечает на вопрос OPs. – jagc