Javascript 循环仅将一个值打印到my file.txt

Javascript 循环仅将一个值打印到my file.txt,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我的firebase循环只在file.txt中打印一个值,我需要所有值。有人知道为什么吗 booksRef.once('value').then(function(snapshot) { snapshot.forEach(function(userSnapshot) { var books = userSnapshot.val(); var book = 'book:'; book += '\r'; book += boo

我的firebase循环只在file.txt中打印一个值,我需要所有值。有人知道为什么吗

booksRef.once('value').then(function(snapshot) {
    snapshot.forEach(function(userSnapshot) {
        var books = userSnapshot.val();
        var book = 'book:';
        book +=  '\r';
        book += books.title;
        book +=  '\r';
        book += books.author;

        let blob = new Blob([book], { type: 'text/plain;charset=utf-8' })
        saveAs(blob, 'file.txt');
    });
});

在阅读每本书后保存文件,这不一定是一种好的做法,因为阅读大量的书需要一些时间,而且可能会发生这样的情况:所有书的文件都会被上一次的Blob覆盖

但是,根本原因是您定义books字符串的行。对于每个循环,您应该在每行之前执行此操作,否则,它会在每次迭代时重置

下面的代码使用字符串插值、箭头函数和
const
声明,是您想要实现的示例实现

// Stringify books.    
booksRef.once('value').then(booksSnapshot => {
  // Initialise books before the loop below.
  let books = '';
  // Iterate over each book in books
  booksSnapshot.forEach(bookSnapshot => {
    // Get value of the snapshot
    const book = bookSnapshot.val();
    // Compose an entry.
    books += `book:\n\t${book.title}\n\t${book.author}`;
  });

  const blob = new Blob([books], { type: 'text/plain;charset=utf-8' });
  saveAs(blob, 'file.txt');
});
结果:

book:
  Don Quixote
  Miguel de Cervantes.
book:
  In Search of Lost Time
  Marcel Proust

您正在循环中保存文件,因此仅保存最后一轮的值。将blob保存在循环外部。当a将blob放置在循环外部时,我会得到一个错误“uncaughtreferenceerror:book未定义”。你能举一个例子说明如何做,也许是做错了吗?你必须在相同的范围内声明
book
。您还需要从循环体中删除清空
书本的行。具体位置和方式?清空书本的行?我并没有书中的任何空行,我现在很困惑:)对不起,我有一个语法错误。。。151 | const book=bookSnapshot.val();152 |//编写一个条目。>153 | books+=
book:\n\t${book.title}\n\t${book.author}
;| ^154 | }); 155 | 156 | const blob=新blob([book],{type:'text/plain;charset=utf-8});我的错误在这一行:
>153 | books+=
book:\n\t${book.title}\n\t${book.author}
我已将所有常量更改为let,但它仍然给我一个语法错误。