Node js代码统计未按订单运行



我是Ruby开发人员,但必须在AWS Lambda上用Node.js编写脚本代码。一切都很好,但问题是代码语句没有按顺序执行,回调函数没有等待request.post完成,而是调用并返回。

RDS.executeStatement(params).promise()的第一个语句运行良好,但在成功的情况下,不再运行request.post和db语句,而是回调调用。我希望回调方法应该运行request.post完成。

我该如何解决该问题?

const params = {
secretArn: 'xxx',resourceArn: 'xxxx',
sql: `SELECT * FROM pins WHERE Pin_Code = 'XXX' and status='ENABLED'`,
database: 'pincodes'
}
let data = await RDS.executeStatement(params).promise();

if (data['records'].length !== 0){

const params = {
url: 'https://development-api.mobixpress.net/v2/products/domesticrecharge',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({dialCode: '+1',productPriceId: productPriceID,receiverPhoneNumber: phone})
};

request.post(params, function(err, res, body) {
if(err){
status = 0;
} else{
status = 1;
const params = {
secretArn: 'xxx',resourceArn: 'xxxx',
sql: `UPDATE pins SET status = 'DISABLED' WHERE Pin_Code = 'XXX' and status='ENABLED'`,
database: 'pincodes'
}
let update = await RDS.executeStatement(params).promise();

}
});


callback(null, {
statusCode: '200',
headers: {},
body: status,
});
}

我对Ruby不是很熟悉,所以我现在不知道那里是否有等价物,但看起来你被节点异步性质绊倒了

这就是著名的JS回调地狱的来源。尤其是如果你把承诺和经典的回调混合在一起,这很快就会变成一场令人困惑的噩梦。

这篇文章将告诉你关于它的一切以及如何避免它:如何处理嵌套回调并避免"回调地狱">

注意:当您试图在同步函数中使用await时,request.post回调应该会引发语法错误

request.post(params, function (err, res, body) {
if (err) {
status = 0
} else {
status = 1
const params = {
secretArn: 'xxx',
resourceArn: 'xxxx',
sql: 'UPDATE pins SET status = 'DISABLED' WHERE Pin_Code = 'XXX' and status='ENABLED'',
database: 'pincodes'
}

const update = await RDS.executeStatement(params).promise()
//            ^
// Compiler should refuse to run this
}
})

最新更新