从数据库获取数据时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代码是异步的,并使用