0

I'm developing a web application using nodejs socket.io and angular 9. In my backend code I have written sockets in socket.connect.service. Follows is a socket I'm using

socket.on('request-to-sit-on-the-table', async function (data, callback) { //Previously Register
    let table = persistence.getTable(tableToken);
    if (typeof table === 'undefined') {
        let errMsg = 'This table does not exists or already closed.'
        callback(prepareResponse({}, errMsg, new Error(errMsg)));
        return;
    }
    //TODO: Get the displayName from the token.
    let guest = await guestUserService.getGuestUserByPlayerToken(JSON.parse(data.userToken));***//Here is the issue***
    // let displayName = 'DisplayName-' + guest;
    let displayName = 'DisplayName-' + Math.random();

    //TODO: Check whether the seat is available

    // If the new screen name is not an empty string
    let isPlayerInCurrentTable = persistence.isPlayerInCurrentTable(tableToken, userToken);
    if (displayName && !isPlayerInCurrentTable) {
        var nameExists = false;
        let currentPlayersTokenArr = persistence.getTableObjectPlayersToken(table)
        for (var token in currentPlayersTokenArr) {
            let gamePlayer = persistence.getPlayerPlayer(currentPlayersTokenArr[token])
            if (typeof gamePlayer !== "undefined" && gamePlayer.public.name === displayName) {
                nameExists = true;
                break;
            }
        }
        if (!nameExists) {
            //Emit event to inform the admin for requesting to sit on the table.
            let ownerToken = persistence.getTableObjectOwnerToken(table);
            let ownerSocket = persistence.getPlayerSocket(ownerToken);
            ownerSocket.emit('requested-to-sit', {
                seat: data.seat,
                secondaryUserToken: userToken,
                displayName,
                numberOfChips: envConfig.defaultNumberOfChips
            });
            callback(prepareResponse({userToken}, 'Player connected successfully.'));
        } else {
            callback(prepareResponse({}, 'This name is already taken'));
        }
    } else {
        callback(prepareResponse({}, 'This user has already joined to a game. Try clear caching'));
    }

});

In my code I'm getting data from another code in guest.user.service. But I get undefined to the value of "guest" Follows are the methods I have used in guest.user.service

exports.findById = (id) => {
    return new Promise(function(resolve, reject) {
        guestUserModel.findById(id, (err, data) =>{
            if(err){
                reject(err);
            } else {
                resolve(data);
            }
        });
    });
};
exports.getGuestUserByPlayerToken = (playerToken) => {
    var player = playerService.findOne({ token: playerToken })
        .then(function (data) {
            return self.findById(data.guestUser._id.toString());
        })
        .then(function (guestUser) {
            return guestUser.displayName;
        })
        .catch(function (err) {
            throw new Error(err);
        })
};

Although I get my displayName for the return value It is not passed to the "guest" in my socket.Is there any syntax issue to get data as I'm using promises.please help

1 Answers1

0

exports.getGuestUserByPlayerToken = async playerToken => {
   try {
     let player = await playerService.findOne({token:playerToken});
     return playerService.findById(player.guestUser._id)
   } catch(error) {
     console.log(error);
     return null;
   }
};

This is just handle error on awaited promise not returned one. You need to handle that in caller side.

Vahid Alimohamadi
  • 4,900
  • 2
  • 22
  • 37