我在應用程序代碼中遇到了一個問題,我想知道處理它的最佳方法:我有一個函數在回調中應用5個值,我想了解使用它的最佳方式。Node.js:來自一個函數的多個回調
這裏是我的功能代碼:
var someFunc = function(callback) {
var http = require('http');
var id;
var url = 'http://somesite.com/json';
// First request to get an array of 5 elements
http.get(url, function(res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
var jsonResult = JSON.parse(body);
// 5 requests with a value from each of the 5 elements
for (var i=0;i<5;i++)
{
(function(idx) {
gameId = jsonResult.gameList[idx].id;
url = 'http://somesite.com' + id + '/token';
http.get(url, function(res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
jsonRes = JSON.parse(body);
callback.apply(null, [idx, jsonRes.interestScore]);
});
}).on('error', function(e) {
console.log("Got error: ", e);
});
})(i);
}
});
}).on('error', function(e) {
console.log("Got error: ", e);
});
};
exports.someFunc = someFunc;
當我調用該函數來檢索5個值我不喜歡這樣寫道:
exports.featured = function(req, res){
getSome.someFunc(function callback(result) {
var variables = {};
var variableName = result;
variables[variableName] = jsonRes.interestScore;
res.render('featured', { score0: variables[0], score1: variables[1], score2: variables[2], score3: variables[3], score4: variables[4] });
});
};
不幸的是「res.render」之後被叫函數只檢索1個值,所以我想知道如何做到這一點,或做出適當的回調。
謝謝。
對不起,我忘了提,循環是在我的代碼很重要,它是用來做一個HTTP GET請求。我將使用全功能代碼編輯我的帖子,使其更清晰。 – user2663041
好吧,我明白,但在循環內附加一個監聽器並不是一個好主意。它會導致意想不到的結果,因爲你有很多函數調用這個* end *事件 – Krasimir
是的,我明白了,那正是我想要避免的,以及爲什麼我在這裏問。 – user2663041