微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

typeahead.js 不从本地获取数据

如何解决typeahead.js 不从本地获取数据

首先,这是一个新手问题:) 抱歉打扰您...

我设法从 Firebase Firestore 获取数据,并将该数据放入一个变量中。

var db = firebase.firestore();
  let contentJSON = [];
db.collection("blog-posts").get().then(function(querySnapshot) {
    querySnapshot.forEach(function(doc) {
var listTemp = {
    "category": doc.data().category,"content": doc.data().content,"date": doc.data().date,"slug": doc.data().slug,"title": doc.data().title
  };
contentJSON.push(listTemp)
    });
});

然后我用这个本地数据创建新的 Bloodhund 实例。

var blogPosts = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('content'),queryTokenizer: Bloodhound.tokenizers.whitespace,local: contentJSON,});

当我搜索此设置时没有任何显示。 我尝试使用 Prefetch 方法使用外部 JSON 运行它并且它工作正常,但是,我需要使用本地数据运行它。我认为本地数据变量的结构有问题。你能帮我看看吗?

解决方法

这可能是一个 AJAX 问题,可以通过 promise 和 async/await 解决。

第一个代码体必须解析 .then() 您可以运行第二个代码体。否则,firebase 代码在猎犬之后完成,并且必须在之前完成。

如果你把firebase代码放到这样的函数中

// (1) add async here
async getBlogPosts() {
  var db = firebase.firestore();
  // (2) add return here
  return db.collection("blog-posts").get().then(function(querySnapshot) {
    querySnapshot.forEach(function(doc) {
    // (3) move variable in here
    let contentJSON = [];
    var listTemp = {
    "category": doc.data().category,"content": doc.data().content,"date": doc.data().date,"slug": doc.data().slug,"title": doc.data().title
    };
    contentJSON.push(listTemp)
    // (4) return here
    return contentJSON
    });
});

然后在前端代码中使用 await 调用它

// (5) the async await will make sure this function happens before we proceed
var contentJSON = await getBlogPosts()
var blogPosts = new Bloodhound({
  datumTokenizer: Bloodhound.tokenizers.obj.whitespace('content'),queryTokenizer: Bloodhound.tokenizers.whitespace,local: contentJSON,});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?