2013-04-16 2 views
1

Я не могу найти решение этой простой проблемы: я хочу вызвать функцию, экспортированную из внешнего .js, и сохранить вывод. Я сделал следующее:Прочитать результат от обратного вызова экспортируемой функции

db.js

function findMessages() { 
    allMsg = mongoose.model('allMsg'); 
    allMsg.find(function (err, message) { 
     console.log('here is ok'); 
     return message; 
    }); 
}; 

exports.returnMessages = findMessages; 

app.js

var db = require('./db'); 

app.get('/message', function(req, res){ 
    var messages = db.returnMessages(); 
    console.log('Nothing here (undefined): ' + messages); 
}); 

Как я могу читать сообщения в app.js? Спасибо.

ответ

2

Простой ответ: вы не можете. Это не так, как работают обратные вызовы.

Вам необходимо изменить findMessages(), чтобы принять функцию обратного вызова.

function findMessages (callback) { 
    allMsg = mongoose.model('allMsg'); 
    allMsg.find(function (err, message) { 
     callback(message) 
    }); 
}; 

// app.js 
app.get('/message', function(req, res) { 
    db.returnMessages(function(messages) { 
     console.log(messages); 
    }); 
}); 
+0

Вы также должны обрабатывать потенциальную ошибку в функции find() либо в самой функции findMessages(), либо также передавать ее в обратный вызов. – matthewtole

+0

Верно, я просто передаю обратный вызов прямо на 'find'. – ThiefMaster

+0

Вы (очевидно) правы. Спасибо. – goliardico

Смежные вопросы