簡體   English   中英

節點 js 代碼語句未按順序運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM