【问题标题】:Resolving a setTimeout inside API endpoint解决 API 端点内的 setTimeout
【发布时间】:2017-04-05 10:00:18
【问题描述】:

我需要为 API 调用添加延迟,因此我使用 setTimeout。成功 2 秒后,我需要返回 res.status(200).json(response)

  exports.someEndpoint = function(req, res) {
    return request.post({
      url: //etc
    })
    .then(function(response) {
      return new Promise(function(resolve, reject) {
        setTimeout(function() {
          // is this right?
          resolve(
            res.status(200).json(response);
          );
        }, 2000);
      });
    });
  };

我的问题是:我需要在setTimeout 中调用resolve 吗?或者我可以完全省略它吗?

【问题讨论】:

    标签: node.js express settimeout


    【解决方案1】:

    我需要在 setTimeout 中调用 resolve 吗?

    这取决于exports.someEndpoint 会发生什么,但通常是的 - 您希望返回一个已完成所有异步操作且处于已完成状态的 Promise。

    例如,如果您的 express 处理程序正在被一个需要承诺的函数捕获,那么在您向用户返回响应之前,流程将继续。

    如果您不关心请求处理程序中的承诺,那么您也可以不 return request.post({ 并且什么都不返回。

    【讨论】:

      【解决方案2】:

      你的代码相当于:

        exports.someEndpoint = function(req, res) {
          return request.post({
            url: //etc
          })
          .then(function(response) {
              setTimeout(function() {
                  res.status(200).json(response);
              }, 2000);
          });
        };
      

      但这只是因为它是一个 Express 路由处理程序,一般不会返回任何东西或特别是承诺。

      另一方面,您的代码:

        exports.someEndpoint = function(req, res) {
          return request.post({
            url: //etc
          })
          .then(function(response) {
            return new Promise(function(resolve, reject) {
              setTimeout(function() {
                // is this right?
                resolve(
                  res.status(200).json(response);
                );
              }, 2000);
            });
          });
        };
      

      可以这样称呼:

      yourModule.someEndpoint(req, res).then(function () {
        // code to run after the timeout
      });
      

      这在较短的版本中是不可能的。

      【讨论】:

        猜你喜欢
        • 2021-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-18
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多