循环只将一个值打印到我的file.txt中

时间:2018-01-23 18:35:15

标签: 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 += books.title;
        book +=  '\r';
        book += books.author;

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

1 个答案:

答案 0 :(得分:1)

您在阅读每本书后保存文件,这不一定是好习惯,因为大量的书需要一些时间,并且可能会发生包含所有书籍的文件将被前一次的Blob覆盖。

然而,根本原因是您定义书籍字符串的行。您应该在每个循环之前执行此操作,否则,它将在每次迭代时重置。

以下代码使用字符串插值,箭头函数和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