【发布时间】:2017-02-26 17:31:07
【问题描述】:
我正在研究获取数组中存在的符号数据的功能。请看我下面的代码。
我正在使用 for 循环遍历数组,但我的代码中的所有计算仅针对 arra 的最后一个元素进行(请检查代码中的 cmets)。我不是 100% 确定这个问题的原因,但我相信这是因为 Node.js 的异步处理。
var symbol = ['symbol1', 'symbol2','symbol3'];
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1;
var yyyy = today.getFullYear();
if (dd < 10) {
dd = '0' + dd
}
if (mm < 10) {
mm = '0' + mm
}
var today1 = yyyy + '-' + mm + '-' + dd;
//for loop start
for (sname in symbol) {
sname = symbol[sname].substring(4);
sname1 = sname.replace("%26", '&');
History.find({ "symbol": sname1 }, function(err, stock) {
if (err) {
next();
}
if (stock != '') {
var objStr = stock[0].values.sort(custom_sort).reverse();
objStr = JSON.stringify(objStr[0]);
var jsonObj = JSON.parse(objStr);
var date = new Date(jsonObj.Date);
var fromDate = date.date("YYYY-MM-DD");
console.log(sname + ' and ' + sname1); //It should print symbol1,symbol2.
// But I am getting symbol3 all the time.
console.log(fromDate);
console.log(today1);
yahooFinance.historical({
symbol: sname + '.NS',
from: fromDate,
to: today1
}, function(err, quotes) {
if (err) {
console.log("Error in fetching data");
}
if (quotes == '') {
console.log("No latest records found to insert");
}
for (var objCounter in quotes) {
var insertObj = {
'Date': quotes[objCounter].date.date("YYYY-MM-DD"),
'Open': quotes[objCounter].open,
'Close': quotes[objCounter].close,
'High': quotes[objCounter].high,
'Low': quotes[objCounter].low,
'AdjClose': quotes[objCounter].adjClose,
'Volume': quotes[objCounter].volume
};
History.findOneAndUpdate({ symbol: sname1 }, { $push: { values: insertObj } }, { safe: true, upsert: true },
function(err, model) {
if (err) {
console.log(err);
} else {
console.log("Record inserted for " + sname1)
}
}
);
}
});
}
else {
console.log("Not Found");
}
});
}
}
【问题讨论】:
-
感谢@MikeC 的回复。我现在使用foreach 循环。仍然了解其他解决方案以备将来使用。
-
示例代码不平衡:有21个
{和22个}。
标签: javascript arrays node.js asynchronous