【问题标题】:Returning the output of an async function in a Hapi route handler在 Hapi 路由处理程序中返回异步函数的输出
【发布时间】:2021-04-27 01:13:40
【问题描述】:

如果有人熟悉并开始使用他们的示例之一,我正在开发 Twitch 扩展程序。我对 JS 很陌生,主要是 C# 背景,所以很多这对我来说有点陌生。基本上我已经设置了一个 hapi 路由,并希望我的节点服务器对不同的服务进行 API 调用,并返回一个字符串,其中包含来自 API 响应的一些数据,然后使用 AJAX 请求将其插入到 iFrame 中。我正在使用的 API 包装器使用异步函数,当我在路由处理程序中调用它们时,请求似乎超时,从我在 chrome 的 devtools 中查看请求时可以看出。不确定 API 调用是否花费了太长时间或类似的东西?这是我正在使用的 API 包装器的链接:https://www.npmjs.com/package/smashgg.js?activeTab=readme

我怀疑我在 async/await 语法中遗漏了一些东西,我还没有完全理解它们是如何工作的。理想情况下,我希望在自己的方法中返回输出字符串的代码,但为简单起见,我只是复制了示例,但我得到了相同的结果。此代码在其自己的文件中运行良好。

这是路由定义:

  server.route({
    method: 'GET',
    path: '/bracket/query',
    handler: bracketQueryHandler
  });

和路由处理方法:

async function bracketQueryHandler(req){
  const payload = verifyAndDecode(req.headers.authorization);
  const { channel_id: channelId, opaque_user_id: opaqueUserId } = payload;
  const currentBracket = channelBrackets[channelId] || initialBracket;

  let tournamentSlug = 'function-1-recursion-regional';
  let eventSlug = 'melee-singles';
  let meleeAtFunction = await Event.get(tournamentSlug, eventSlug);

  let sets = await meleeAtFunction.getSets();
  let phaseGroups = await meleeAtFunction.getPhaseGroups();
  let setString = "";
  for(var i in sets){
      setString += "\n" + sets[i].getFullRoundText() + " : " + sets[i].getDisplayScore();
  }

  console.log(setString);
  return setString;
}

【问题讨论】:

    标签: javascript node.js async-await hapi


    【解决方案1】:

    您需要等待异步函数bracketQueryHandler的结果来解决。这应该就像在路由处理程序中添加等待一样简单。

    server.route({
      method: 'GET',
      path: '/bracket/query',
      handler: await bracketQueryHandler
    });
    

    也就是说我通常会使用类似..的结构。

    server.route({
      method: 'GET',
      path: '/bracket/query',
      handler: async (request, h) => { 
        return await bracketQueryHandler(request)
      }
    });
    

    此结构与文档一致。 https://hapijs.com/tutorials#routes

    阅读 async / await https://medium.freecodecamp.org/how-to-master-async-await-with-this-real-world-example-19107e7558ad

    使用 Hapi 17 及更高版本非常有必要熟悉此语法和 Promise。

    【讨论】:

    • handler: await bracketQueryHandler 将等待 函数 一次(不是函数调用)并且没有用处。
    猜你喜欢
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2019-08-27
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多