【问题标题】:Delay Response with Hapi 18.1使用 Hapi 18.1 延迟响应
【发布时间】:2020-05-03 01:53:24
【问题描述】:

如何使用 Hapi 18.1 设置响应延迟,如果 API 响应缓慢,我希望看到沙漏旋转。在早期版本中,我使用了setTimeout(),如下所示。

server.route({
    method: 'GET',
    path:'/hello',
    handler: (request, h) => {
       setTimeout(() => reply('Hello World!'), 1000);
    }
});

但是 v18.1 报错了

server.route({
    method: 'GET',
    path:'/hello',
    handler: (request, h) => {
       setTimeout(() => h.response('Hello World!'), 1000);
    }
});

错误

Debug: internal, implementation, error
    Error: get method did not return a value, a promise, or throw an error
    at module.exports.internals.Manager.execute (C:\Users\javakb\workspace\node_modules\hapi\lib\toolkit.js:48:29)
    at processTicksAndRejections (internal/process/task_queues.js:85:5)
    at async Object.internals.handler (C:\Users\javakb\workspace\node_modules\hapi\lib\handler.js:46:20)
    at async exports.execute (C:\Users\javakb\workspace\node_modules\hapi\lib\handler.js:31:20)
    at async Request._lifecycle (C:\Users\javakb\workspace\node_modules\hapi\lib\request.js:312:32)
    at async Request._execute (C:\Users\javakb\workspace\node_modules\hapi\lib\request.js:221:9)

感谢任何帮助。

【问题讨论】:

    标签: hapijs


    【解决方案1】:

    Hapi 18 期望它的路由处理程序返回响应或解析为 一个答复。你的代码没有这样做。这可以通过简单地返回一个在等待 1 秒后解析为响应的承诺来解决。

    示例

    server.route({
        method: 'GET',
        path: '/',
        handler: (request, h) => {
          return new Promise((resolve, reject) => {
            setTimeout(() => {
              resolve(h.response('Hello World!'));
            }, 1000);
          });
        }
      });
    

    【讨论】:

      猜你喜欢
      • 2015-01-02
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多