Как насчет обеспечения прослушивания http-объекта после загрузки файла в память:
// server.js
var myMap = {};
function readCsv(cb){
fs.createReadStream('filename.csv')
.pipe(csv())
.on('data', (row) => {
// Build javascript object
myMap[row['key']] = row['value'];
})
.on('end', () => {
console.log('Done.');
cb();
});
}
var app = express();
exports = Object.freeze({
server: http.createServer(app)
init(){
readCsv(() => {
this.server.listen(80)
})
}
})
Что-то в этом роде.
Вы также можете использовать Обещание
// server.js
var myMap = {};
function readCsv(){
return new Promise((request, reject) => {
fs.createReadStream('filename.csv')
.pipe(csv())
.on('data', (row) => {
// Build javascript object
myMap[row['key']] = row['value'];
})
.on('end', () => {
console.log('Done.');
resolve();
})
.on('error', reject)
})
}
var app = express();
exports = Object.freeze({
server: http.createServer(app)
init(){
return readCsv().then(() => {
this.server.listen(80)
})
}
})
Решение:
Object.metaClass.s = {
def o = delegate.save()
if (!o) {
delegate.errors.allErrors.each {
println it
}
}
o
}
Это добавляет метод, названный s (), который будет звонить, сохраняют () и печатают любые ошибки.
Это не самый чистый взгляд, и существует, вероятно, лучший, более отличный способ сделать это. На основе взгляда здесь я соединил этот код, который мог бы быть чем-то, что Вы могли развернуть и использование:
class Book {
void printTitle(){ println "The Title" }
}
Book.metaClass.customPrintTitle << {->
println "changin ur class"
printTitle()
}
def b = new Book()
b.customPrintTitle()