7
私は、特定の呼び出しで、私がブロックして、先に進む前に認証クエリの結果を待つアプリケーションを構築しています。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;
}
);
}
は私が認証()関数自体ではなく、内部の匿名関数selectCbからそれらの値を返すことができるようにしたいとコールバックが完了するまでブロックを認証しています。これをやり遂げるにはどうすればいいですか?
ありがとう、これは、しかし、私はまだこのうち値を取得する方法が少しわからないよ、興味深いソリューションであることが表示されます。認証が失敗した場合はこの時点で要求を停止したい場合は、アプリケーションを続行します。コールバックが値を返すときに、コールバックで返されたものもすべて食べられるように思われるので、これでtrue/falseを返すことはできません。それをどうやってやりますか? –
@majicbunnieアプリケーションフローの一部が非同期であると、全体が非同期になり、このようなコールバックが必要になります。これを単純化してコードをより使いやすくするには、「先物」または「約束」と呼ばれる概念を見てください。それはあなたが狂って深く入れ子にされたコールバックを作成するのを防ぎます。あなたがそれを検索する場合、周りの情報がたくさんありますが、ここから始めることができます:http://howtonode.org/promises – nickf
OPと同じです。 Promiseなどを使用しないと、単純なプログラムを使用してauthenticate()関数自体からこれらの値をどのように戻すことができますか?私は解決策を理解することができたが、私は例の用法によって混乱した。それはOPの質問に答えるようには見えません。 – jagc