Должен работать как задумано, прекратив использовать forEach, используя только метод pop массива, вызывающий функцию снова для следующей итерации, когда обещание было разрешено или отклонено (должен быть лучший способ сделать это, но пока ..) .) Спасибо @Nikita Malyschkin и @MadWard за ответы, но обратный вызов сделал меня немного запутанным для решения @MadWard и не вернул то, что предполагалось, что касается ответа @Nikita, который был немного моим вопросом ... как использовать обещание принудительно синхронизировать цикл foreach (поскольку узел асинхронный).
var net = require('net');
const fs = require('fs');
const async = require("async");
var serverPingList = [
{
port:'80',
domain:'domainexample'
},
{
port:'8089',
domain:'domainexample'
},
{
port:'80',
domain:'domainexample'
},
{
port:'80',
domain:'domainexample'
},
{
port:'80',
domain:'domainexample'
},
]
pingAll();
function pingAll(){
var server = serverPingList.pop();
var client = new net.Socket();
pingPlatforms(server,client)
.then(function(result){
console.log(result);
if(serverPingList.length>0)
pingAll();
}, function(err){
console.log(err);
if(serverPingList.length>0)
pingAll();
});
}
function pingPlatforms(server,client){
return new Promise(function(resolve, reject){
var logInit = `server ${server.domain} and port ${server.port} Connecting...`
var log;
fs.appendFile('ping.log', logInit + '\r\n', (err) => {
if(err)
console.log('Unable to append to server.log.');
});
//console.log(server.port);
//console.log(server.domain);
///7909492/node-js-sobytie-socket-io-client-connectfailed-connecterror
//https://nodejs.org/api/net.html#net_socket_connect
console.log('Connecting...')
var socket = client.connect(server.port, server.domain);
socketEvents(socket,client,server).then(function(result){
resolve(result);
}, function(err){
reject(err)
});
/*
socket.on('disconnect', function () {
console.log('Disconnected');
reject('disconnected');
});
*/
/*
socket.on('close', function () {
console.log('socket closed');
//socket.disconnect(0);
//client.destroy();
});
*/
});
}
function socketEvents(socket,client,server){
return new Promise(function(resolve, reject){
//the ping failed
socket.on('error', function(){
var now = new Date().toString();
log = `${now}: server ${server.domain} and port ${server.port} Connection Failed`;
fs.appendFile('ping.log', log + '\r\n', (err) => {
if(err)
console.log('Unable to append to ping.log.');
});
client.destroy();
reject(log);
});
// the ping is successful
socket.on('connect', function(){
console.log('Connected');
var now = new Date().toString();
log = `${now}: server ${server.domain} and port ${server.port} Connection Successful`;
fs.appendFile('ping.log', log + '\r\n', (err) => {
if(err)
console.log('Unable to append to ping.log.');
});
client.destroy();
resolve('success');
});
});
}