Я все еще n00b с NodeJS, поэтому этот вопрос может быть несколько элементарным.NodeJS + MongoJS: Вложенные обратные вызовы
Я использую MongoJS для чтения двух логически связанных коллекций. Первый find() возвращает значение, которое я передаю второму find(), чтобы получить необходимую информацию.
Я пробовал несколько стратегий, последний (фрагмент №1), являющийся классом, который я экспортирую.
До этого у меня была функция, которая сделала return, возвращая требуемое значение, то есть «config [0]».
В этом коде все, что я сделал, было установлено атрибутом «sapConfig» для слова «test», но когда я выполняю этот код, значение «sapConfig» всегда «null» после вызова «get_config()», метод и - самый странный из всех - ссылка на «this.sapConfig = 'test» генерирует ошибку, т. е. «Невозможно установить свойство« sapConfig »неопределенного».
Когда я код так же, как простая функция с возвратом заявлением (2 фрагмента кодом #), никаких ошибок не были получены, но возвращаемое значение всегда «неопределенное» хотя console.log() заявления показывают, что значение возвращаемой переменной имеет желаемое значение. Что дает?
фрагмент кода # 1: Возвращает объект
"use strict";
var mongojs = require('mongojs'); // MongoDB API wrapper
module.exports = function(regKey) {
this.regKey = regKey;
this.sapConfig = null;
this.get_config = function() {
// Read SAP connection information from our MONGO db
var db = mongojs('mongodb://localhost/MIM', ['Configurations','Registrations']);
db.Registrations.find({ key: this.regKey }, function(err1, registration){
console.log('Reg.find()');
console.log(registration[0]);
db.Configurations.find({ type: registration[0].type }, function(err2, config){
console.log('Config.find()');
console.log('config=' + config[0].user);
this.sapConfig = 'test';
});
});
}
this.get_result = function() {
return this.sapConfig;
}
}
Опять же, код сниппета # 1, когда я делаю вызов «Get_Config()», приводит к ошибке, когда он выполняет строку "this.sapConfig = 'test'".
Однако после этой ошибки я могу выполнить «obj.get_result()», и я получаю значение, для которого оно было инициализировано, т. Е. Null. Другими словами, тот же код не генерирует ошибку о том, что «это» не определено, как .в на «Get_Config()» метод
фрагмент кода # 2: Использование «возвращение» заявление
"use strict";
var mongojs = require('mongojs'); // MongoDB API wrapper
module.exports = function(regKey) {
// Read SAP connection information from our MONGO db
var db = mongojs('mongodb://localhost/MIM', ['Configurations','Registrations']);
db.Registrations.find({ key: regKey }, function(err1, registration){
console.log('Reg.find()');
console.log(registration[0]);
db.Configurations.find({ type: registration[0].type }, function(err2, config){
console.log('Config.find()');
console.log('config=' + config[0].user);
return config[0].user;
});
});
}
Когда я получаю возвращаемое значение и проверяю его, он «не определен». Например, в узле CL I следующие команды:
var config = require('./config') // The name of the module above
> var k = config('2eac44bc-232d-4667-bd24-18e71879f18c')
undefined <-- this is from MongoJS; it's fine
> Reg.find() <-- debug statement in my function
{ _id: 589e2bf64b0e89f233da8fbb,
key: '2eac44bc-232d-4667-bd24-18e71879f18c',
type: 'TEST' }
Config.find()
config=MST0025
> k <-- this should have the value of "config[0]"
undefined
Вы можете увидеть, что запросы были успешными, но значение «К» является «неопределенным». Что тут происходит?
Мне все равно, какой подход я использую. Мне просто нужен один из них для работы.
Заранее благодарен!
См. Мой новый пример в ответе на вторую часть :) Привет. – matt