我正在使用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()
是异步的。当工作(获取帖子)完成后,它将执行提供的回调,但是在调用之后该函数将继续运行.then()
,并且由于您未返回任何内容,因此您一无所获。
如果希望函数返回异步操作的结果,则必须从函数本身返回promise。为了帮助开发人员实现这一点,有async function
自动返回承诺的。在异步函数中,您可以使用await
关键字等待其他promise 。您的函数看起来像是一个异步函数:
async function getInstagramPostsByHashTag(hashtag) {
return await ig.scrapeTag(hashtag)
}
但这是多余的,因为它返回的结果与直接调用to的结果完全相同ig.scrapeTag(hashtag)
。我不太了解ejs,但是我认为您能做的最好的事情是这样的(再次,只有伪代码,我不知道ejs的渲染方式):
posts = insta.scrapeTag("blablabla")
then
ejs.render("<%=posts%>", {posts})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句