我正在使用Instagram-Scraping
模块来显示所有带有特定哈希标记的帖子,但是在使用函数返回查找到的条目时遇到了一个问题。
// in my middleware
function getInstagramPostsByHashTag(hashtag) {
return ig.scrapeTag(hashtag).then(result => {
console.log(result); // all posts are displayed in my console
return result;
});
}
// in my ejs template i send the function getInstagramPostsByHashTag()
<%=getInstagramPostsByHashTag("instagram")%> // nothing is displayed
您不能从函数返回帖子,因为此时函数已经返回了。这是因为.then()
是异步的。当工作(获取post)完成时,它会执行提供的回调,但是函数在调用.then()
之后会继续运行,因为没有返回任何东西,所以没有得到任何东西。
如果希望函数返回异步操作的结果,则必须从函数本身返回一个承诺。为了帮助开发人员实现这一点,有一个异步函数
,它自动返回一个承诺。在异步函数中,可以使用await
关键字等待其他承诺。您的函数将类似于异步函数:
async function getInstagramPostsByHashTag(hashtag) {
return await ig.scrapeTag(hashtag)
}
但这是多余的,因为它返回的结果与直接调用ig.scrapetag(hashtag)
的结果完全相同。我并不真正了解ejs,但我认为您可以做的最好的事情是这样的(只是伪代码,再说一遍,我不知道用ejs呈现是如何工作的):
posts = insta.scrapeTag("blablabla")
then
ejs.render("<%=posts%>", {posts})