2016-11-21 19 views
0

私はsetTimeoutを使用しているので、API呼び出しに遅延を追加する必要があります。成功した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); 
     }); 
    }); 
    }; 

私の質問は:私はsetTimeoutresolveを呼び出す必要がありますか?または、私はそれを完全に省略することはできますか?

答えて

2

あなたのコードは同等です:

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

しかし、それは一般的に何か特に約束を返すことが期待できないのExpressルートハンドラであるという理由だけで。

一方、あなたのコード:

短いバージョンでは可能ではないでしょう
yourModule.someEndpoint(req, res).then(function() { 
    // code to run after the timeout 
}); 

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

のように呼び出すことができます。

0

setTimeoutで解決を呼び出す必要がありますか?

それはexports.someEndpointで発生するが、通常はそう何が起こっているかに依存します - あなたはそれを満たしています状態で全ての非同期操作を完了した約束を返すようにしたいでしょう。

たとえば、エクスプレスハンドラが約束を期待する関数によって捕捉されている場合、ユーザに応答を返す前に、フローは継続します。

リクエストハンドラの約束を気にしない場合は、return request.post({も指定できず、何も返されません。

関連する問題