0
我使用功能_getLogFileUrls
,它執行POST
請求並將數據返回給回調函數。返回的數據正被添加到數組中。多個POST請求的異步問題
函數_getLogFileUrls
在一個循環中被調用。
如何在所有請求完成後返回結果數組?
我明白setTimeout
是這種方法的錯誤方式,我寫代碼的方式是創建一個回調地獄。我如何擺脫setTimeout
函數而不涉及各種異步問題。
// app.post('/api/getLogs', auth, loggingAPI.getLogs); // Make API request
function getLogs(req, res) {
if (! req.body.id) {
return res.status(500).send('Please check the params!');
}
var date;
if (req.body.date) {
date = req.body.date;
} else {
date = new Date().toISOString().slice(0,10);
}
var sqlQuery = "SELECT `LogFileID` FROM `logs_data` WHERE `EmpID` = '" + req.body.id + "' AND DATE(`Timestamp`) = '" + date + "'",
resArray= [];
hitThisQueryForMe(sqlQuery, res, function(rows) {
if (! rows.length) res.json(rows);
_.each(rows, function(item) {
console.log('item: ' + item.LogFileID);
_getLogFileUrls(item.LogFileID, function(response) {
resArray.push(response);
});
});
setTimeout(function() {
console.log('final urls: ' + JSON.stringify(resArray));
res.send(resArray);
resArray = [];
}, 4000);
});
}
function _getLogFileUrls(logFileId, callback) {
var request = require('request'),
config = require('../../config.js');
var fileParams = {
fileName: 'LogFiles/' + logFileId
};
request.post({
url: config.filesServiceUrl + 'get-logfile-urls',
json: fileParams
}, function(error, response, body) {
if (!error && response.statusCode === 200) {
callback(body);
} else {
console.log('err requesting logs: ' + JSON.stringify(error));
res.status(400).send('Err requesting logs:');
}
}).on('error', function(err) {
console.log('File service error for Logs: ' + err);
});
}
不知道我得到了它,你的意思使用異步模塊?然後調用_getLogFileUrls來代替myAsyncFunction? –
請參閱編輯中的更改 – Dafuck