我可能在這裏錯過了某處,所以我正在尋找建議。在單獨的函數中使用節點中回調的結果
我有一個nodejs服務器正在偵聽客戶端連接,並根據收到的數據調用API。
對該API的第一次調用獲取需要在後續調用中使用的ID,以將它們組合在一起。
我在哪裏掙扎的是,對API的調用必然是異步的,在回調函數中,我將ID分配給一個變量。當異步調用正在被API服務器處理時,更多數據從客戶端進入並且需要更多API調用,但是直到我知道第一次調用的結果爲止,因爲第二次調用依賴於調用的結果之前我無法觸發它們。
處理這個問題的正確方法是什麼?我覺得我應該使用Q將第一個API調用的結果承諾給第二個API,但我不確定它應該如何構造。或者我應該在第一次完成之前將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