私はこの API に取り組んでおり、responseObject を返すにはこの関数が必要ですが、返す前に非同期リスナーによって値を設定する必要があります。問題は、リスナーがその値の値を変更する機会を得る直前に、ノード js がそれらを返すことです。
関数がすぐに戻るのを防ぐために while(responseObject === undefined) ループ以外にできることはありますか?
注 : 他の switch ステートメントのケースはまだ書いていません。
exports.queryServer = function (useIPv6, databaseId, apiId, ipAddress, serverIp, timeoutDelay, port) {
var client = useIPv6 ? dgram.createSocket("udp6") : dgram.createSocket("udp4");
var transactionId = randomstring.generate({
length: 20,
charset: "alphanumeric"
});
var queryString = databaseId + ";" + apiId + ";" + ipAddress + ";" + implementationProtocolVersion + ";" + nodeJSAPI + ";" + transactionId + ";";
var responseObject;
client.on("error", function (err) {
responseObject = "Socket error : " + err;
});
client.send(queryString, 0, queryString.length, port, serverIp, function () {
console.log("Querying Server : " + queryString);
});
var timeoutObject = setTimeout(function () {
client.close();
//alert user/throw error here
console.log("Error : Request timed out after " + timeoutDelay + " milliseconds");
responseObject = "Error : Response timed out after " + timeoutDelay + " milliseconds";
}, timeoutDelay);
client.on("message", function (message) {
client.close();
clearTimeout(timeoutObject);
var msg = message.toString();
var responseArray = msg.split(";;")[1].split(";");
switch(databaseId){
case 12:
responseObject = new na_proxy(responseArray);
break;
}
console.log("Server Response : " + msg);
});
return responseObject;
}