私はおそらくここのどこかでポイントを逃しているので、私はアドバイスを探しています。別の関数でノード内のコールバックの結果を使用する
クライアント接続をリッスンしているノード・サーバーがあり、受け取ったデータに基づいてAPIを呼び出します。
このAPIへの最初の呼び出しでは、それらをグループ化するために後続の呼び出しで使用する必要があるIDが取得されます。
私が苦労しているのは、APIへの呼び出しが必ず非同期であり、コールバックでIDを変数に割り当てることです。その非同期呼び出しがAPIサーバーによって処理されている間に、より多くのデータがクライアントから入ってきて、より多くのAPI呼び出しが必要になりますが、2番目の呼び出しが依存するため、最初の呼び出しの結果を知るまでは起動できません。
これを処理する適切な方法は何ですか? 2番目のAPI呼び出しの結果を約束するためにQを使用する必要があるように感じますが、どのように構造化するべきかはわかりません。または、最初に完了するまでAPIコールをキューに入れるだけですか?どうすればいい?
例の問題のコード:
var server = net.createServer();
//set up the callback handler
server.on('connection', handleConnection);
handleConnection(conn) {
//do some stuff...
firstAPICall();
conn.on('data', handleData);
}
handleData(data) {
//do some stuff...
otherAPIcall();
}
firstAPICall() {
client.get("http://myAPI/getID", function (data, response) {
conn.myID = data[0].myID;
}
}
}
otherAPICall() {
//How do I make sure I actually have a value
//in conn.myID from the first function???
client.post("http://myAPI/storeData", { data: {myID:conn.myID, data:someData} }, function (data, response) {
//do some stuff...
}
}
}
あなたが欠けている点は、「そのAPIへの最初の呼び出しでは、それらをグループ化するために後続の呼び出しで使用する必要があるIDが取得されます」ということです。それは必須条件かそうでないかのどちらかです。 – Tibrogargan