typeahead.js 没有从本地获取数据
Posted
技术标签:
【中文标题】typeahead.js 没有从本地获取数据【英文标题】:typeahead.js does not get data from local 【发布时间】:2021-04-13 05:36:42 【问题描述】:首先,这是一个新手问题:) 很抱歉打扰你...
我已设法从 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 运行它并且它有效,但是,我需要使用本地数据运行它。我认为本地数据变量的结构存在问题。你能帮我看看吗?
【问题讨论】:
【参考方案1】:这可能是一个 AJAX 问题,可以通过 promise 和 async/await 来解决。
第一段代码必须解析.then()
你可以运行第二段代码。否则,firebase 代码会在 Bloodhound 之后完成,并且必须在此之前完成。
如果你将 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,
);
【讨论】:
感谢您的回答。它说代码中有错误。 Uncaught SyntaxError: Unexpected identifier(First ) 你能发布完整的错误吗?你是否在你的应用中包含了 firestore 包?以上是关于typeahead.js 没有从本地获取数据的主要内容,如果未能解决你的问题,请参考以下文章
添加一些 html 元素后,typeahead 不会从表中获取数据
使用 Django 通过远程数据提高 Twitter 的 typeahead.js 性能