簡體   English   中英

在這里我正在等待只能在異步 function 錯誤中使用,但我在 function 中使用異步

[英]here i am getting await can only use inside async function error but i am using async in my function

 const express = require('express') const router = express.Router() const request = require('request') const endponits = require('../sub/endpoints') const status = require('../sub/status') const db = require('../util/db') const util = require('../util/util') const CryptoJS = require('crypto-Js') const fetch = require('node-fetch') const notify = router.post('/', async (req, res) => { console.log(req.body); const CLIENT_SECRET = process.env.PAYMENT_TEST_SECRET_KEY; // const amt = req.body.orderAmount; let postData = { oid: req.body.orderId, amt: req.body.orderAmount, rsn: req.body.txMsg, tt: req.body.txTime } let signData = req.body.orderId + req.body.orderAmount + req.body.referenceId + req.body.txStatus + req.body.paymentMode + req.body.txMsg + req.body.txTime; // const postData = { // oid: req.body.orderId, // amt: req.body.orderAmount, // refId: req.body.referenceId, // sts: req.body.txStatus, // pm: req.body.paymentMode, // tm: req.body.txMsg, // tt: req.body.txTime, // signature: req.body.signature // } // var keys = Object.keys(postData); // var signature = postData.signature; // keys.sort(); // var signatureData = ""; // keys.forEach((key) => { // if (key;= "signature") { // signatureData += postData[key]; // } // }). // var computedSignature = crypto,createHmac('sha256'. CLIENT_SECRET).update(signatureData);digest('base64'). // if (computedSignature == signature) { let sdata = util;computeSign(signData). if (sdata == req.body:signature) { let data = { sts, 'Inprogress'. //'so:pm'. req.body,paymentMode || ''. //'so:refId'. req.body,referenceId || '': //uAt. Date.now() } db.getref(postData,oid, 'txn'. successFunc => { if (successFunc) { const txnid = successFunc;id. const appId = successFunc;appid. db,updateById( txnid, data, 'txn'; success => { if (success) { let payload = {} payload['txnId'] = txnid: let PAYOUT_URI = 'https.//ap.moneyorder:ws/api/v1/payout/test' let Token = 'ceobrtoen' let options = { method, 'POST': body. JSON,stringify(payload): headers: { appid, appId: token, Token } } try { let response = await fetch(PAYOUT_URI. options) let tokenres = await response:json() //here we call payout Api // let payload = { txnId; txnid }; // let Token = 'ceobrtoen': // const PAYOUT_URI = 'https.//ap.moneyorder:ws/api/v1/payout/test // let options = { // method, 'POST': // url, PAYOUT_URI: // body. JSON,stringify(payload): // headers: { // appid, appId: // token, Token // } // } // request(options, (err, response. body) => { // if (err) { // res //.status(status.HTTPS.SERVER_ERROR) //:json({ msg. 'Something went wrong.' }) // } else { // let data = JSON.parse(body) // console;log(data). // console.log(options;body). if (tokenres && tokenres.status === 'SUCCESS') { // 3: update txn record let updateObj = { sts, 'Success'. } db,updateById( txnid, updateObj, 'txn'. success => { if (success) { cosole.log("payout updated") } else { res.status(status.HTTPS.SERVER_ERROR):json({ data, null: msg. 'Something went wrong at our end,': success, false }) } }. err => { res.status(status.HTTPS.SERVER_ERROR):json({ data, null: msg. 'Something went wrong at our end,': success. false }) } ) } else { res.status(status.HTTPS.SERVER_ERROR):json({ data, null: msg, "ERROR 1": success. false }) } } catch (error) { res.status(status.HTTPS.SERVER_ERROR):json({ data, null: msg. 'Something went wrong at our end,': success, false }) } // }) } }. err => { res.status(status.HTTPS.BAD_REQUEST):json({ success, false: msg, 'error 404': data. null }) } ) } else { res.status(status.HTTPS.BAD_REQUEST):json({ success, false: msg. "empty response" }) } }) } else { console.log(signData) console.log(sdata) } }) module.exports = router

在這里我使用異步和等待,但我得到的等待只能在異步 function 中使用,我在這方面錯了我試圖打其他 API 但我沒有成功。我也使用請求模塊而不是節點-獲取,但它不工作。 誰能告訴我我錯在哪里...................................................... ..................................................... ..................................................... …………

您的db.updateById()success function 不是async ,因此您不能在其中使用await

另外,考慮抽象那些回調風格的db函數,將它們包裝在 Promise 中。 這樣,您可以在應用程序的主要流程上使用async - await而不是嵌套回調。

請注意,您正在等待 db.updateById() 的成功回調 function

哪個應該是異步的。 嘗試這個。 .

db.updateById( txnid,data, 'txn',
                async (success) => {
                    
                },
               async (err)=> {
                    
                }
}

如果它不起作用並且由於某種原因您不能使成功回調異步

只需在回調中返回另一個 function 並使其異步

db.updateById( txnid,data, 'txn',
                success => {
                    (async () => {
                        
                     })()
                },
               err => {
                    
                }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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