解决API端点内的setTimeout问题

我需要给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吗? 或者我可以完全忽略它?


您的代码相当于:

  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
});

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


我需要在setTimeout内部调用解析吗?

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

例如,如果您的快速处理程序被预计承诺的函数捕获,那么在您向用户返回响应之前,流程将继续。

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

链接地址: http://www.djcxy.com/p/55383.html

上一篇: Resolving a setTimeout inside API endpoint

下一篇: Correct way of handling promisses and server response