router.get('/', (req, res) => {
db.query('SELECT * FROM endpoints').then((endpoints) => {
let arr = [];
endpoints.forEach((i) => {
if (i.type === 1) {
let docker;
if (i.url.match('unix:///var/run/docker.sock')) {
docker = new Docker({socketPath: '/var/run/docker.sock'});
} else {
docker = new Docker({host: i.url, port: 2375});
}
arr.push({
id: i.id,
name: i.name,
type: i.type,
url: i.url,
status: docker.ping((err) => !err ? 0 : 1),
groupId: i.groupId
})
}
})
return res.send(arr)
})
});
[
{
"id": "1",
"name": "local",
"type": 1,
"url": "unix:///var/run/docker.sock",
"groupId": 1
},
{
"id": "2",
"name": "dev",
"type": 1,
"url": "cluster.dev.io",
"groupId": 1
}
]
docker.ping()
видимо, возвращает Promise. Надо дождаться его выполнения и только тогда возвращать ответ.const promises = endpoints.filter((i) => i.type === 1)
.map((i) => {
const result = {
id: i.id,
name: i.name,
type: i.type,
url: i.url,
groupId: i.groupId
};
const settings = (i.url.match('unix:///var/run/docker.sock')) ?
{socketPath: '/var/run/docker.sock'} : {host: i.url, port: 2375};
const docker = new Docker(settings);
return docker.ping().then(err => {
result.status = !err;
return result;
})
});
Promise.all(promises).then((results) => res.send(results));