用async.series的回调函数填充数组

fill a array with a callback from async.series

本文关键字:函数 填充 数组 回调 async series      更新时间:2023-09-26

我的回调函数在'async。Series '返回多个值,并从'elements'创建多个输出。

我如何通过使用'forEach'将返回值写入数组?

async.series(
    {
        // Browse
        elements: function(callback) {
            Server_browse(item, function(result) {
                callback(null,result);
            });
        },
    },
    function(err,result) {
        if (err) {
            console.log(" error : ", err);
            console.log(err.stack);
        }
        console.log('elements=' + JSON.stringify(result.elements));
    }
);

如果你只发出一个请求,那么caolan/async是没有用的。

Server_browse(item, ...中的item变量从何而来

我可能是错的,因为有缺失的信息,但我认为你想要实现这一点:

var items = ['query1', 'query2', 'query3'];
async.mapSeries(
    items,
    // for each item
    function(item, callback) {
        Server_browse(item, function(result) {
            callback(null, result.elements);
        });
    },
    // when all queries are done
    function(error, resultElements) {
        console.log(resultElements)
    }
);

下面是另一个函数'browse'和Server_browse。

函数'Server_browse'将一个文件夹或变量委托给函数'browse'。在'browse'中,我将在数组中添加变量或再次调用'Server_browse',如果项目是文件夹。目前我得到所有的文件夹和变量在'console.log(result.elements)'上分开。但是我将把所有的文件夹和变量写在一个数组中。

var browse = function(item,indx,array,callback){
// 'item' is a Folder or Variable which i get from the server
//item = {"MyVariable1":{"referenceTypeId":"ns=0;i=46","isForward":true,"nodeId":"ns=1;i=1005","browseName":{"namespaceIndex":0,"name":"MyVariable1"},"displayName":{"text":"MyVariable1"},"nodeClass":"Variable","typeDefinition":"ns=0;i=63"}};

var child = ns='+item.browseName.namespaceIndex+';i='+item.nodeId.value;
  if (item.$nodeClass.key == 'Variable') {
        callback(item);
    }else{
        Server_browse(child,function(result){
            callback(result);
        });
    }
}
var Server_browse = function(item,callback){
        node_browse.session.browse( item,function (err, itemResults,diagnostics) {
            if (err) {
                console.log(err);
                console.log(itemResults);
                console.log(diagnostics);
            }else{
                for(var i=0; i<itemResults.length; i++){
                    itemResults[i].references.forEach(function(element,index,arr){
                        browse(element, index, arr, function(item){
                            callback(item);                             
                        });
                    });
                }
          }
    });
}