Это код javascript моего приложения node-webkit, работающий с jquery и nedb для управления базами данных.Чтение переменных из родительской функции
librodb.find({_id: docs[i].libro}, function (err, bookdoc) {
window.titulo = bookdoc[0].titulo;
window.ISBN = bookdoc[0].ISBN;
});
Это считывает записи из db и возвращает их в массив (bookdoc).
for (var i = 0; i < docs.length; i++) {
librodb.find({_id: docs[i].libro}, function (err, bookdoc) {
window.titulo = bookdoc[0].titulo;
window.ISBN = bookdoc[0].ISBN;
});
switch(docs[i].razon){
case 1:
$(".listed").append('<li><i class="fa fa-institution"></i><i class="fa fa-sign-in"></i>El '+docs[i].fecha+' '+docs[i].cantidad+' Libros ("'+window.titulo+'", ISBN: '+window.ISBN+') producidos.</li>');
break;
case 2:
libreriadb.find({_id: docs[i].libreria}, function (err, librarydoc) {
window.nombre = librarydoc[0].nombre;
});
$(".listed").append('<li><i class="fa fa-institution"></i><i class="fa fa-sign-in"></i>El '+docs[i].fecha+' '+docs[i].cantidad+' Libros ("'+window.titulo+'", ISBN: '+window.ISBN+') devueltos por Libreria ("'+window.nombre+'"), recibo '+docs[i].documento+'.</li>');
break;
case 3:
$(".listed").append('<li><i class="fa fa-question"></i><i class="fa fa-sign-in"></i>El '+docs[i].fecha+' '+docs[i].cantidad+' Libros ("'+window.titulo+'", ISBN: '+window.ISBN+') en stock ingresaron por "'+docs[i].descripcion+'".</li>');
break;
}
}
Вопрос заключается в том, что переменные window.titulo и window.ISBN определены внутри функции базы данных чтения, но вне там Арент.
Если я использую
window.variablename=
Когда я называю переменные после того, как де librodb.find функции как возврат «неопределенном».
, если я использую
var variablename=
или
variablename=
Выполнение останавливается со следующей ошибкой: «ReferenceError: título не определен» (в том месте, где я пытаюсь вызвать его из переключатель).
Во всех трех случаях предупреждение внутри функции librodb.find возвращает возвращаемое значение.
Как мне определить или вызвать переменные?
Я пробовал это раньше (без следующей функции), он не работал (я не помню, почему: B, я попробую его снова), но зачем нужна следующая функция? doesnt цикл for делает это автоматически? без этого цикл повторяется до того, как чтение db закончилось? –
@JiancerounoTaringa Цикл 'for' выполняет в основном одно и то же, но делает это синхронно; теперь есть способ приостановить цикл, ожидая результатов операций поиска. Поскольку нам пришлось переместить оператор switch внутри обратного вызова, если мы использовали цикл for, он увеличивал бы весь путь до doc.length до того, как оператор switch фактически выполнит. Поэтому 'i' будет равно' doc.length', что совсем не то, что вы хотите. Также результаты поиска могут выйти из строя, и ваши вставленные элементы могут оказаться в неправильном порядке. – Hargobind
О, я только что запомнил, внутри librodb.find работает bookdoc, но документы (из родительской функции поиска) не работают, а внутри libreriadb.find работает librarydoc, но оба документа и bookdoc не делают –