当我在查询回调函数中登录points
时,它返回true值,但是当我在查询回调函数之外记录此值时,它返回了empety对象{}。如何在查询回调函数之外访问points
?
crypto.find({ "date": moment().format("YYYY-MM-DD hh:") + '00' }, function (err, result ) {
if (result.length > 0) {
result.forEach(signal => {
++x
points[x] = {};
for (let i = 0; i < 4; i++) {
if (i == 1) {
let currentPrice = self.getCurrentPrice(moment(signal.date).add(i, 'hours').format("YYYY-MM-DD hh:mm"));
points[x][i] = { currentPrice: currentPrice }
} else if (i == 2) {
let currentPrice = self.getCurrentPrice(moment(signal.date).add(i, 'hours').format("YYYY-MM-DD hh:mm"));
points[x][i] = { currentPrice: currentPrice }
} else if (i == 3) {
let currentPrice = self.getCurrentPrice(moment(signal.date).add(i, 'hours').format("YYYY-MM-DD hh:mm"));
points[x][i] = { currentPrice: currentPrice }
}
}
});
}
console.log(points); // loged true value
return points;
}).sort({ createdAt: -1 })
console.log(points); // loged {} empety object
答案 0 :(得分:0)
我认为回调外部的console.log(点)可能在回调内部的console.log(点)之前被调用。也许您可以尝试这样的事情:
async function getPoints(){
try {
var result = await findMongoPromise();
console.log(result);
}
catch(error){
console.log('ERROR:', error)
}
}
function findMongoPromise(){
return new Promise((resolve,reject)=>{
crypto.find({ "date": moment().format("YYYY-MM-DD hh:") + '00' }, function (err, result ) {
if (result.length > 0) {
result.forEach(signal => {
++x
points[x] = {};
for (let i = 0; i < 4; i++) {
if (i == 1) {
let currentPrice = self.getCurrentPrice(moment(signal.date).add(i, 'hours').format("YYYY-MM-DD hh:mm"));
points[x][i] = { currentPrice: currentPrice }
} else if (i == 2) {
let currentPrice = self.getCurrentPrice(moment(signal.date).add(i, 'hours').format("YYYY-MM-DD hh:mm"));
points[x][i] = { currentPrice: currentPrice }
} else if (i == 3) {
let currentPrice = self.getCurrentPrice(moment(signal.date).add(i, 'hours').format("YYYY-MM-DD hh:mm"));
points[x][i] = { currentPrice: currentPrice }
}
}
});
resolve(points);
}
else {
reject('ERROR');
}
});
});
}
getPoints();