Socket.io только иногда работает и делится emit - PullRequest
0 голосов
/ 12 февраля 2019

Я запрашиваю циклы к API, где я использую данные из первого запроса, чтобы сделать другой запрос.Когда я заканчиваю последний запрос, я отправляю данные во внешний интерфейс, а затем показываю, как запросы заканчиваются.Иногда он работает идеально, но в других случаях запросы выполняются, но не передаются на передний план.Также, если вы открываете новую вкладку во время выполнения запросов, ее отправляют на первую вкладку.Мне нужно отправить результаты на отдельных вкладках.

server.js

var server = https.createServer(httpOptions, app);
var io = require('socket.io')(server);
app.io = io;
  io.once('connection', function(socket){
  app.socket = socket.id;
  socket.on("disconnect",function(){    
    socket.disconnect();
  });
});

results.js (Запрос маршрута)

const auth = require("../services/auth");
const rp = require("request-promise")
exports.get = async(req, res, next)=>{
    var i= 0;
    var x = 0;
    const buyerName = []
    const itemID = []
    res.render("sales",{username: data.name})

        rp("URI 1") // VERY FIRST GET AND CALL LOOP
        .then(body => {
            callNext(body)
        })
        .catch(e => {
            console.log(e)
        })


    function callNext(body) {
        let responseJSON = JSON.parse(body);
        if (x>=responseJSON.results.length) { // VERIFY LOOP INDEX TO CALL END FUNCTION
            reqProductsEnd();
        } else {
            rp("URI 2")
            .then(data =>{
                const order = JSON.parse(data)
                buyerName.push(order.buyer.nickname)
                reqProducts(body)
            })
            .catch(e=>{
                console.log(+e)
            })

        }
    }

    function reqProducts(body) {
            rp("URI 3",{
                data: x++
            })
            .then(data =>{
                const item = JSON.parse(data)
                itemID.push(item.thumbnail)
                req.app.io.to(`${req.app.socket}`).emit('receive item', {buyer: buyerName[i], itemID: itemID[i]});
                console.log(i)
                console.log(productName[i])
                i++;
                callNext(body) // CALL LOOP AGAIN
            })
            .catch(e=>{
                console.log(e)
            })       
}
    function reqProductsEnd() {
        console.log(itemID)
        console.log(buyerName)
    }   
}

view.ejs

$(function () {
var socket = io.connect('https://localhost:3000', { forceNew: true });
socket.on('receive item', function(msg){
    var x = JSON.stringify(msg);
    $("div").append(msg.buyerName);
});
});
...