从数据库获取数据时Javascript代码未按顺序运行

从数据库获取数据时Javascript代码未按顺序运行,javascript,node.js,Javascript,Node.js,我有两个函数,如下所示。它本质上只是从数据库中获取数据 function processRequest(query){ let dynamoData = getDynamoData(query); console.log('abc') } function getDynamoData(key){ var params = { TableName: 'test_table', Key: { 'TWEET_KEY' :

我有两个函数,如下所示。它本质上只是从数据库中获取数据

function processRequest(query){
    let dynamoData = getDynamoData(query);
    console.log('abc')
}


function getDynamoData(key){
    var params = {
        TableName: 'test_table',
        Key: {
          'TWEET_KEY' : {S: String(key)}
        }
      };
      
      // Call DynamoDB to read the item from the table
      ddb.getItem(params, function(err, data) {
        if (err) {
            console.log("Error");
        } else {
            console.log("Successfully got data from table")
            return data.Item;
        }
      });
}
当前,当我运行代码时,它会在控制台中打印以下内容:

abc
Successfully got data from table
但是,我需要它在打印
abc
之前打印
成功地从表中获取数据


我知道我可能必须在函数中使用async,但是我真的很难让代码正常运行。如果有人能帮我使代码正常运行,我将不胜感激。谢谢大家!

您应该将这两个函数移到一个单独的模块中(如果还没有这样做的话),并使它们成为异步函数,如下所示:

async function processRequest(query){
    let dynamoData = await getDynamoData(query);
    console.log('abc')
}

async function getDynamoData(key){
    var params = {
        TableName: 'test_table',
        Key: {
          'TWEET_KEY' : {S: String(key)}
        }
      };
      
  return new Promise((resolve, reject) => {
      // Call DynamoDB to read the item from the table
      ddb.getItem(params, function(err, data) {
        if (err) {
            console.log("Error");
            reject(err);
        } else {
            console.log("Successfully got data from table")
            resolve(data.Item);
        }
      });
  });
}


您应该将这两个函数移到一个单独的模块中(如果还没有这样做的话),并使它们成为异步的,如下所示:

async function processRequest(query){
    let dynamoData = await getDynamoData(query);
    console.log('abc')
}

async function getDynamoData(key){
    var params = {
        TableName: 'test_table',
        Key: {
          'TWEET_KEY' : {S: String(key)}
        }
      };
      
  return new Promise((resolve, reject) => {
      // Call DynamoDB to read the item from the table
      ddb.getItem(params, function(err, data) {
        if (err) {
            console.log("Error");
            reject(err);
        } else {
            console.log("Successfully got data from table")
            resolve(data.Item);
        }
      });
  });
}


您需要使processRequest异步:

 async function processRequest(query){
    let dynamoData = await getDynamoData(query);
    console.log('abc')
}


function getDynamoData(key){
    var params = {
        TableName: 'test_table',
        Key: {
          'TWEET_KEY' : {S: String(key)}
        }
      };
      
      // Call DynamoDB to read the item from the table
      ddb.getItem(params, function(err, data) {
        if (err) {
            console.log("Error");
        } else {
            console.log("Successfully got data from table")
            return data.Item;
        }
      });
}

您需要使processRequest异步:

 async function processRequest(query){
    let dynamoData = await getDynamoData(query);
    console.log('abc')
}


function getDynamoData(key){
    var params = {
        TableName: 'test_table',
        Key: {
          'TWEET_KEY' : {S: String(key)}
        }
      };
      
      // Call DynamoDB to read the item from the table
      ddb.getItem(params, function(err, data) {
        if (err) {
            console.log("Error");
        } else {
            console.log("Successfully got data from table")
            return data.Item;
        }
      });
}

您正在主线程上获取数据吗?这是否回答了您的问题?如上所述,db代码是异步的,使用的是在主线程上获取数据吗?这是否回答了您的问题?如上所述,db代码是异步的,并使用