Я впервые пишу облачные функции в NodeJS, и это работает очень хорошо, но всякий раз, когда я пытался развернуть, я получал предупреждение, подобное этому:
предупреждение Избегать вложенных обещаний обещание / no-nesting (строка 9)
Я пытался избавиться от этого, но есть некоторые проблемы, которые мне нужно решить:
exports.updateUserCount = functions.pubsub.schedule('every 2 minutes').onRun(context => {
return admin.database().ref('/servers').once('value').then(snapshot =>{
var ips = {}
snapshot.val().forEach( (server, i) => { ips[server.label] = server.ipv4[0] })
var promises = snapshot.val().map( (server, index) => {
let sftp = new Client()
return Promise.all([sftp, server.label, index, sftp.connect({ host : server.ipv4[0], port : '22', username : 'user_name', password : '*********' })])
.then( values => {
return Promise.all([values[0], values[0].get('/etc/openvpn/server/openvpn-status.log'), values[1], values[2]])
}).then( data => {
data[0].end()
if (data[1]) {
let count = countWords(data[1].toString(),"client_list") - 1
console.log(count, `users connected now with ${data[2]} ${data[3]}`)
return Promise.all([ count, admin.database().ref(snapshot.child(index.toString()).ref).update({ userCount : count }) ])
}
console.log('file not found')
return false
}).catch(err => {
console.log(err);
});
})
console.log(`array ${JSON.stringify(ips)}`)
return Promise.all(promises)
}).catch(err => {
console.log(err);
});
});
Если я пытаюсь поставить другие код вне вложенности Я не могу получить экземпляр sftp
, и он не может быть объявлен глобально, потому что каждый sftp
связан и имеет конфиги разных серверов.
Любая помощь будет оценена и спасибо это заранее.