提问者:小点点

这里我正在等待只能使用内部异步函数错误,但我在我的函数中使用异步


null

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

null

这里我使用的是async和await,但我是getting await只能在一个async函数中使用,在这里我是错误的,我试图使用其他API,但我没有获得成功,我也使用了request module而不是node-fetch,但它没有工作。 有没有人能告诉我我错在哪里了。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。


共1个答案

匿名用户

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

另外,考虑抽象那些回调样式的db函数,将它们包装在承诺中。 这样,您就可以在应用程序的主流上使用async-await,而不是嵌套回调。