Cách xử lý đoạn code bất đồng bộ khi call stored procedures sql server



  • Chào các bác!
    Em sử dụng thằng tedious để call stored procedures thì, em muốn return về biến result nhưng do 2 hàm request.on vẫn chưa chạy xong nên nó luôn trả về là undifined.
    Vậy trong trường hợp này em nên code thế nào?
    https://paste.ofcode.org/JqDz88CwTCXz4NiL2sCjUa



  • @Thành187

    import { sequelizeCameraDetect } from '../sequelize'
    import { TYPES } from 'tedious';
    import { Request } from 'tedious';
    import { connection } from '../app'
    
    
    const getListClusterCamera = async (data) => {
        try {
            const promisedResult = new Promise((resolve, reject) => {
                let request = new Request(`usp_ClusterCamera_List`, function (err) {
                    if (err) {
                        console.log(err);
                    }
                });
                request.addParameter('Page', TYPES.Int, data.Page);
                request.addParameter('PageSize', TYPES.Int, data.PageSize);
                request.addParameter('Name', TYPES.NVarChar, data.Name);
                request.addParameter('Status', TYPES.Int, data.Status);
                request.addParameter('OrderBy', TYPES.VarChar, data.OrderBy);
                request.addParameter('SortBy', TYPES.VarChar, data.SortBy);
                request.addOutputParameter('Total', TYPES.Int);
        
                let result = {}
                result.data = []
                request.on('returnValue', (Total, value, metadata) => {
                    return result.total = value
                });
                request.on('doneInProc', (rowCount, more, rows) => {
                    if (rows.length > 0) {
                        rows.forEach(e => {
                            result.data.push({
                                Id: e.Id.value,
                                Name: e.Name.value,
                                CreatedDate: e.CreatedDate.value,
                                Status: e.Status.value,
                                CameraType: e.CameraType.value
                            })
                        });
                    }
                    console.log(result);
                    resolve(result);
                })
                request.on('error', (err) => reject(err));
                
                connection.callProcedure(request);
            })
            return promisedResult;
        } catch (error) {
            return error
        }
    }
    module.exports = { getListClusterCamera }
    

Log in to reply