如何从mongodb查询回调函数返回数据?

时间:2020-07-20 15:16:58

标签: javascript node.js callback

当我在查询回调函数中登录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

1 个答案:

答案 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();