我在应用程序代码中遇到了一个问题,我想知道处理它的最佳方法:我有一个函数在回调中应用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