所以我目前正在构建一个用于学习的小型个人应用程序,我有一个场景,我将使用其他第三方的API,但有几个用于1个对象。例如,我有1个仪表板来呈现,我想对不同的地方进行不同的调用,并产生一个包含三个请求响应的数据对象。
例如,目前我有一些(类似于)下面的内容,它发出请求并返回该数据,以及find方法和当前用户会话中的其他数据。效果很好。
app.get('/profile', isLoggedIn, function(req, res) {
Object.find().exec(function (err, records) {
request('firstUrl', function(err, resp, body) {
res.render('profile.ejs', {
user : req.user,
records : records,
responseData : JSON.parse(body)
});
});
});
});
但是现在我想提出超过1个请求......所以我不确定如何进行此操作以及最佳实践?
以下感觉它不会起作用和杂乱:
app.get('/profile', isLoggedIn, function(req, res) {
Object.find().exec(function (err, records) {
request('firstUrl', function(err, resp, body1) {
request('secondUrl', function(err, resp, body2) {
request('thirdUrl', function(err, resp, body3) {
res.render('profile.ejs', {
user : req.user,
records : records,
responseData1 : JSON.parse(body1),
responseData2 : JSON.parse(body2),
responseData3 : JSON.parse(body3)
});
});
});
});
});
});
任何人都可以对此有所了解吗?
答案 0 :(得分:1)
您可能会发现async.js对于保持代码清除“回调地狱”非常有用。具体而言是parallel或series方法。
例如(未经测试):
async = require('async');
app.get('/profile', isLoggedIn, function(req, res) {
async.parallel({
records: function(callback) {
Object.find().exec(function (err, records) {
callback(null, records);
});
},
responseData1: function(callback) {
request('firstUrl', function(err, resp, body) {
callback(null, JSON.parse(body));
});
},
responseData2: function(callback) {
request('firstUrl', function(err, resp, body) {
callback(null, JSON.parse(body));
});
},
responseData3: function(callback) {
request('firstUrl', function(err, resp, body) {
callback(null, JSON.parse(body));
});
},
},
function(err, results) {
res.render('profile.ejs', {
user : req.user,
records : results.records,
responseData1 : results.responseData1,
responseData2 : results.responseData2,
responseData3 : results.responseData3
});
});
});
parallel方法也可以使用一组函数而不是一个对象,这对你也很有用。看看at the documentation.
如果您打算使用请求获取可变数量的URL,则可能需要重构代码以使用async.js的队列或货物方法,而不是为要加载的每个URL重复相同的代码。 / p>