【发布时间】:2015-03-26 22:07:23
【问题描述】:
我正在与 API 通信以获取有关 id 数组的信息。所以数组中的每个 id 都需要对 api 的请求,如果它们与逻辑匹配,我想从响应中构建一个数据数组。但是,在构建新数组之前,正在执行处理请求的函数的回调。在处理对 api 的大量调用时,我往往会遇到这个问题。我该如何解决这个特定的例子,以及将来解决这个问题的最佳方法是什么?
var request = require('request');
var _ = require('lodash');
var siteLayouts = [1550, 1552, 1554, 1556, 1558, 1560, 1562, 1564, 1566, 1568, 1570, 1572, 1574, 1730, 1734, 1736, 1738, 1740, 1896, 1898, 1900, 1902, 1904, 1906, 1908, 1910, 1914, 1922, 1924, 1926, 1928, 1930, 1932, 1934, 1936, 1938, 1940, 1942, 1944, 1946, 1948, 1950, 1952, 1954, 1956, 1958, 1960, 1962, 1964, 1966, 1968, 1970, 1972, 1974, 1976, 1978, 1980, 1984, 1986, 1988, 1990, 1992, 1994, 1996, 1998, 2000, 2002, 2004, 2006, 2008, 2010, 2012, 2014, 2016, 2020, 2022, 2030, 2032, 2034, 2036, 2038, 2040, 2042, 2044, 2046, 2048, 2052, 2054, 2056, 2060, 2062, 2064, 2066, 2068, 2070, 2072, 2122, 2124, 2148, 2154, 2156, 2270, 2272, 2274, 2374, 2418, 2688, 2692, 2968, 3756, 4094, 5122, 5524, 7326, 7494, 8704, 8886, 9226, 9232, 9234, 9236, 9238, 9830, 9836, 10052, 10054, 10056, 10999, 11083, 11085, 11429, 11513, 17279, 20397, 22285, 22287, 22289, 22291, 22293, 22295, 22807, 22809, 22811, 22813, 22815];
function getLayoutModules(siteLayouts, callback) {
var matchedModules = [];
for (var i = 0; i < siteLayouts.length; i++) {
request('http://PRIVATE-API-URL/layout/' + siteLayouts[i], function(err, res, body) {
if (!err && res.statusCode == 200) {
var layoutModules = JSON.parse(body);
var match = _.filter(layoutModules, {
'dtoLayoutModule': {
'ModuleName': 'Featured Content'
}
});
if (match.length > 0 && match[0].dtoLayoutModule) {
//console.log(match[0].dtoLayoutModule);
matchedModules.push(match[0].dtoLayoutModule);
console.log(matchedModules.length)
}
}
});
}
callback(matchedModules);
}
getLayoutModules(siteLayouts, function(matchedModules) {
console.log(matchedModules);
});
我已经验证数据正在通过 console.log 长度添加到最终数组,但我首先看到回调 console.log,然后是长度。这里还有一个使用_.filter过滤后的请求响应体示例
[{
RequestStatus: {
StatusCode: '200',
StatusTxt: 'Successful request.',
Result: 'Successful request.',
ValidationErrors: null
},
dtoLayoutModule: {
Id: 116013,
LayoutId: 10999,
LayoutName: 'layout name',
ModuleId: 7,
ModuleName: 'Featured Content',
DisplayName: 'name to display',
Position: 4,
Config: '<config><item name="layout" value="primary" /></config>',
MaxContentCount: 4,
CanInherit: false,
IsInheritable: false,
IsStaticModule: false
}
}]
【问题讨论】:
标签: javascript arrays node.js request lodash