0

我正在研究这个 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;

}

4

0 回答 0