2016-11-21 51 views
0

我需要給API調用添加一個延遲,所以我使用的是setTimeout。成功2秒後,我需要返回res.status(200).json(response)在API端點內解決setTimeout

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

我的問題是:我需要調用resolvesetTimeout裏面?或者我可以完全忽略它?

回答

2

您的代碼就相當於:

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

但僅僅因爲它是不是有望迴歸一般或任何特別承諾的快速路由處理。

在另一方面代碼:

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

這不會在較短的版本是可能的。

0

我需要在setTimeout內部調用解析嗎?

這取決於正在發生的事情與exports.someEndpoint發生,但通常是 - 你會想回到已完成所有異步操作在它的完成狀態的承諾。

例如,如果您的快速處理程序正在被期望承諾的函數捕獲,那麼在您向用戶返回響應之前,流程將繼續。

如果您不關心您的請求處理程序中的承諾,那麼您也可以不使用return request.post({並且不返回任何內容。