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