【发布时间】:2017-11-24 07:16:56
【问题描述】:
我正在尝试解决以下问题。 考虑以下情况。我需要检查一组服务器是否还活着。或者更具体地说,我需要从提供的列表中找到第一个工作服务器,我需要一个一个地执行此操作。
例如,如果第一个服务器不工作,检查另一个和另一个...
就 NodeJS 是异步的而言,我无法在 for 循环中执行此操作。所以我尝试实现类似于递归的东西,看起来很丑而且不起作用,但我试过了)
static findWorkingServer(servers, payload) {
return NetworkUtils.getMyPublicIP()
.then((ip) => {
return new Promise(function (resolve, reject) {
let currentIndex = -1;
if (servers.length > 0) {
let currentServer;
let serverCheckCallback = function (result) {
if (result) {
resolve({working: currentServer, payload: payload});
}
else {
if (currentIndex < servers.length-1) {
currentIndex++;
currentServer = servers[currentIndex];
NetworkUtils.checkIfServerWorking(currentServer, ip)
.then(serverCheckCallback);
}
else {
reject(new Error("No working servers found"))
}
}
};
serverCheckCallback(false);
}
else {
resolve(new Error("No servers provided"));
}
})
});
}
static checkIfServerWorking(credentials, publicIp) {
return new Promise(function (resolve, reject) {
if(credentials) {
request({
url: credentials.url,
agentClass: agentClass,
agentOptions: {
// Agent credentials
}
})
.then(res => {
// Do some stuff with resposne
resolve(someCondition);
})
.catch(err => {
resolve(false);
});
}else {
resolve(false);
}
});
}
请帮助获得想要的结果,也许可以同步运行请求。
【问题讨论】:
-
试试这个.....github.com/caolan/async
标签: node.js ecmascript-6 promise request es6-promise