поэтому я должен вычислить share
в цикле. На каждой итерации этого цикла я должен получить переменную с именем rent
из массива. Поэтому я разделил функцию calculate
на базу данных.Функции и обратные вызовы в Node.js
var calculate = function() {
while(count < 100) {
var share = 50;
var shareArray = [];
for(var i = 0; i < 100; i++) {
var pension = share*2; // mathematical stuff
// Gets a rent from a database and returns it in a callback
getRent(modules, share, function(rent) {
share = rent*foo; // some fancy mathematical stuff going on here
// I need to get the share variable above out of its function scope
});
// I need the share variable right here
shareArray.push(share); // the value of share will be for i = 0: 50, i= 1: 50 ...
// This is not what i want, i need the share value from getRent()
}
count++;
}
}
Теперь, как вы можете видеть, мне представлены следующие проблемы. Поскольку я работаю в node.js, единственный способ получить переменную rent
из массива модулей - через эту функцию обратного вызова, которая называется getRent()
. Дело в том, что мне нужно значение share
после этого шага, но вне getRent()
. Есть ли способ, которым я могу это сделать?
Это getRent()
- Функция:
var getRent = function(modules, share, callback) {
// Searching for a fitting rent in the modules array
// Just assume this is happening here
callback(rent);
};
Итак, вопрос: как я могу "вернуться" share
:
getRent(modules, share, function(rent) {
share = rent*foo; // some fancy mathematical stuff going on here
// I need to get the share variable above out of its function scope
});
каким-либо образом?
Что означает «getFromDB()»? Я не понимаю, как это может работать, поскольку выборка из базы данных почти наверняка включает асинхронный шаг. – Pointy
Кроме того, вы почти наверняка будете намного лучше, с точки зрения производительности, если бы вы могли сделать ** один ** запрос, чтобы получить все нужные вам значения, а не отдельный запрос для каждого из них. Это будет намного, намного медленнее, чтобы сделать это по одному. – Pointy
Прошу прощения. Это просто построенный пример. Настоящий код будет трудно объяснить это. Просто предположим, что это работает. Mhh maybee, я отредактирую его. –