здесь я получаю ожидание, могу использовать только внутри ошибки функции asyn c, но я использую asyn c в своей функции - PullRequest
1 голос
/ 19 июня 2020

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

здесь я использую asyn c и ожидаю, но я получаю ожидание, можно использовать только внутри функции asyn c, где я ошибаюсь в этом Я пытаюсь чтобы попасть в другой API, но я не получаю успеха. Я также использую модуль запроса вместо node-fetch, но он не работает. кто-нибудь может сказать мне, где я не прав .......................................... .................................................. .................................................. .........

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Функция success вашего db.updateById() не async, поэтому вы не можете использовать await внутри него.

Также рассмотрите возможность абстрагирования этих обратных вызовов в стиле db функции, завернув их в обещания. Таким образом, вы можете использовать async - await в основном потоке вашего приложения вместо вложенных обратных вызовов.

0 голосов
/ 23 июня 2020

Обратите внимание, что вы выполняете функцию обратного вызова await внутри функции db.updateById ()

, которая должна быть asyn c. Попробуй это. .

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

, если он не работает, и вы не можете выполнить успешный обратный вызов asyn c по какой-то причине

просто верните другую функцию в обратном вызове и сделайте это asyn c

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