Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么async.map只传递我的JSON的值?_Json_Node.js_Asynchronous_Async.js - Fatal编程技术网

为什么async.map只传递我的JSON的值?

为什么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

我在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':'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);
  });
};