为什么async.map只传递我的JSON的值?
我在node.js中有一个函数,如下所示:为什么async.map只传递我的JSON的值?,json,node.js,asynchronous,async.js,Json,Node.js,Asynchronous,Async.js,我在node.js中有一个函数,如下所示: exports.getAllFlights = function(getRequest) { // this is the package from npm called "async" async.map(clients, getFlight, function(err, results) { getRequest(results); }); } 变量客户端应该是如下所示的JSON: {'A4Q':'JZA8187','B7P':'D
exports.getAllFlights = function(getRequest) {
// this is the package from npm called "async"
async.map(clients, getFlight, function(err, results) {
getRequest(results);
});
}
变量客户端应该是如下所示的JSON:
{'A4Q':'JZA8187','B7P':'DAL2098'}
我希望map函数将变量客户机数组的各个索引传递给getFlight。但是,它却传递了每个的值(例如:“DAL2098”、“JZA8187”等等)
这是预期的功能吗?异步中是否有一个函数可以实现我想要的功能
getFlight
的签名是getFlight(标识符,回调)
。标识符是当前混乱的内容。它返回回调(null,rtn)
。Null表示不存在错误,rtn表示我的函数生成的JSON。首先创建一个自定义事件。为返回数据附加侦听器。然后处理它
var EventEmitter = require('events');
var myEmitter = new EventEmitter();
myEmitter.emit('clients_data',{'"A4Q"': 'JZA8187'}); //emit your event where ever
myEmitter.on('clients_data', (obj) => {
if (typeof obj !=='undefined') {
if (obj.contructor === Object && Object.keys(obj).lenth == 0) {
console.log('empty');
} else {
for(var key in obj) {
var value = obj[key];
//do what you want here
}
}
}
});
是的,这是预期的结果。文档不是很清楚,但是async.js的所有迭代函数都传递iterable的值,而不是键。有一系列传递键和值的函数。例如:
async.eachOf(clients, function (value, key, callback) {
// process each client here
});
不幸的是,没有mapOf
如果您不介意并行工作,您可以使用eachOfSeries
:
var results = [];
async.eachOfSeries(clients, function (value, key, callback) {
// do what getFlight needs to do and append to results array
}, function(err) {
getRequest(results);
});
另一个(更好的)解决方法是使用适当的阵列:
var clients = [{'A4Q': 'JZA8187'},{'B7P': 'DAL2098'}];
然后使用你原来的逻辑。但是,我更喜欢使用如下结构:
var clients = [
{key: 'A4Q', val: 'JZA8187'},
{key: 'B7P', val: 'DAL2098'}
];
嗯,您需要正确格式化客户端对象,然后才能将其与
async.map()
一起使用<代码>..map()可以帮助您:
var client_list = _.map(clients, function(value, key) {
var item = {};
item[key] = value;
return item;
});
在此之后,您将拥有一个如下所示的数组:
[{A4Q:'JZA8187'},{B7P:'DAL2098'}]
然后,您可以使用async.map()
:
所以您只想将数组中每个对象的索引映射到getFlight函数?因为客户端是一个对象,而不是数组。我希望它将{'A4Q':'JZA8187'}和{'B7P':'DAL2098'}分别传递到getFlight。然后获取keyA4Q或B7P?@BenCooper是的,您需要显示
getFlight()的参数
function。很好地解释了async.js的功能
exports.getAllFlights = function(getRequest) {
async.map(client_list, getFlight, function(err, results) {
getRequest(results);
});
};