Promise函数不返回结果

第227章

我正在使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章