我第一次在NodeJS中编写Cloud Functions,并且运行良好,但是每当我尝试进行部署时,我都会收到如下警告:
警告避免嵌套promises promise / 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
都连接到不同的服务器并具有不同的配置。
任何帮助将不胜感激,谢谢。