私はNodeJSでかなり新しく、非同期メカニズムで失われました。NodeJSと同期して2つの関数を実行する方法は?
HTTP POST要求を最初のURL(たとえば、https://example.com/first)に送信するコードがあり、ステータスコード200で応答されたときに、同じサーバーに別の要求を送信してサーバーが存在するかどうかを確認します最初の要求の処理で完了します(たとえば、-https://example.com/statusCheck)。
サーバはテキスト/プレーンレスポンスを返します。ビジー状態の場合は「true」、使用準備ができている場合は「false」を返します。 私は、2秒ごとにサーバーに照会するwhileループを使用して書き込みました。最大で10回の反復までです。言い換えれば
var request = require('request');
var firstURL = "https://example.com/first";
var serverCheck = "https://example.com/statusCheck";
// Sends up to 10 requests to the server
function checkServerStatus(){
var serverReady = false;
var count = 0;
while (!serverReady && count < 10) {
count++;
setTimeout(function(){
request.get(serverCheck, function(err, resp, body){
if (err){
console.log(err);
} else if (body == "false") {
generatorReady = true;
}
})
}, 2000);
}
return generatorReady;
}
// Sends the first request and return True if the response equals to 200
function sendFirstRequest(){
var req = request.post(firstURL, function (err, resp, body) {
if (err) {
console.log(err);
return false;
} else if (resp.statusCode === 200){
return true;
} else {
return false;
}
});
};
module.exports = function(){
// Sends the first request
var firstRequestStatus = sendFirstRequest();
if (firstRequestStatus) {
return checkServerStatus();
}
};
は、私は、sendFirstRequest
が最初に実行応答を待つしたい、と応答がtrue
である場合には、私がcheckServerStatus
を実行して、彼の戻り値を取得したいです。反復中にそれぞれの間で睡眠をとることができれば、それは素晴らしいでしょう(setTimeout
は私にとってもうまくいきません)。
編集:コールバック地獄を避けるためにfunction* with yield
またはasync-await
を使用できると聞いてきましたが、この場合はどうすれば実装できますか?
を使用するためのノード> = 8を使用する必要が次の例 。 [Example here](https://stackoverflow.com/questions/19739755/nodejs-callbacks-simple-example) – chrpk
ノード8+を使用している場合は、Hi Dan、https://nodejs.org/apiをご覧ください/http.html#http_http_request_options_callback ---あなたの編集に関しては、ジェネレータ(関数* w/yield)を使用したいとは思っていません。また、http.requestモジュールでasync/awaitを使用する場合は、あなたがasync/awaitで動作させたい方法でそれを包むために '約束する'(これはすべての関数では当てはまりません)。この場合、私は約束事から始め、async/awaitに切り替えることを理解しています。 –