[英]Node js code statments not running as per order
我是 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 不是很熟悉,所以我現在不知道那里是否有等價物,但看起來你被 Nodes 異步性質絆倒了
這就是著名的 JS 回調地獄的來源。 尤其是如果您將 promise 與經典回調混合使用,這可能會立即成為令人困惑的噩夢。
這篇文章將告訴你所有關於它以及如何避免它: 如何處理嵌套回調並避免“回調地獄”
注意:當您嘗試在同步函數中使用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
}
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.