Node.js 返回未定义节点JS的函数

Node.js 返回未定义节点JS的函数,node.js,Node.js,我目前正在尝试遍历一个JSON元素数组,解析并将所需数据添加到一个特殊格式的字符串中,一旦满足条件,就开始上传这些数据 然而,我遇到的问题是,我的变量“deviceOutString”被返回为未定义,留下一个与数组中JSON元素的写入次数相同的“未定义”字符串。我知道“checkDuplicates”函数的返回是正确的,因为在返回值之前,日志显示值是正确的 我在下面附上了我的代码,如果你有任何想法,请告诉我 谢谢 旧代码更新如下 var i=0; var parsedJson =

我目前正在尝试遍历一个JSON元素数组,解析并将所需数据添加到一个特殊格式的字符串中,一旦满足条件,就开始上传这些数据

然而,我遇到的问题是,我的变量“deviceOutString”被返回为未定义,留下一个与数组中JSON元素的写入次数相同的“未定义”字符串。我知道“checkDuplicates”函数的返回是正确的,因为在返回值之前,日志显示值是正确的

我在下面附上了我的代码,如果你有任何想法,请告诉我

谢谢

旧代码更新如下

    var i=0;
    var parsedJson = JSON.parse(storedData) ;
    var storedDataSize = parsedJson.length;
    console.log('Stored Data Size: '+storedDataSize);

    var async = require('async');

    async.each(parsedJson, function( subElemJson, callback1) {
        async.series([
            function(callback){
                console.log('dstring: ' + deviceOutString); 
                console.log('i : ' + i);

                var subElemJsonPretty = JSON.stringify(subElemJson,null,0) ;
                var date = subElemJson['date'];

                deviceOutString += checkDuplicates(subElemJson, deviceOutString);
                console.log('theLoop*DString: ' + deviceOutString);             

                callback(null, 'one');
            },

            function(callback){
                if((i == storedDataSize - 1 || count == 225) && storedDataSize > 0) {

                    writeDCC(deviceOutString);
                    count = 0;
                    makeList();
                }
                i++;                
                callback(null, 'two');
                setTimeout(function () { callback1(); }, 500);
            }
        ]);

    }); }
更新的新代码

所以有几件事

1:var日期=subElemJson['date'];通过数组语法访问对象属性是一种糟糕的做法。吹毛求疵,但嘿:P try var data=subElemJson.date;相反

2:deviceOutString未在您提供的代码中的任何位置定义

3:async.series和async.series都需要一个回调函数,当它们都完成时。这就是将callbacknull称为“一”的全部意义所在在最终的async.series回调中将值传递给结果数组。您正在调用setTimeoutfunction{callback1;},500;在错误的地方,还任意将其延迟超时

因此,正确的async.series格式为:

async.series([
  function(callback) {
    // do stuff
    callback(null, someValue);
  },
  function(callback) {
    // do other stuff
    callback(null, someOtherValue);
  }
], function(results) {
  // all the stuffs are done
  console.log(results); <-- results is an array containing "someValue" and "someOtherValue" from the iterations above
  callback1(results);
});
另外,async.each也在同一条船上-它希望您传递一个消息,我正在循环的每件事情现在都已经完成了!最后的功能


Async docs on.每个向下滚动的docs on.series:

deviceOutString变量在哪里定义?也许你应该尝试代替Async.series我应该说:你在处理parsedJson时没有调用异步函数,为什么要使用Async库?为什么不使用一个简单的for循环呢?感谢您对良好实践的建议。我还应该补充一点,deviceOutString被定义为函数的一个参数。不用担心。你整体情况如何?很高兴能帮助您,直到问题解决。我试着根据您的建议进行更新-现在异步的语法看起来更好吗?我更新了上面的新代码。然而,我仍然会遇到同样的问题,因为temp没有定义。
async.series([
  function(callback) {
    // do stuff
    callback(null, someValue);
  },
  function(callback) {
    // do other stuff
    callback(null, someOtherValue);
  }
], function(results) {
  // all the stuffs are done
  console.log(results); <-- results is an array containing "someValue" and "someOtherValue" from the iterations above
  callback1(results);
});