Почему мое событие socket.io не может сработать внутри области моих цепочек обещаний или внутри области функции? - PullRequest
0 голосов
/ 06 марта 2019

Этот пост о том, как лучше понять механизм React.component.При попытке передать событие от моего клиента на мой сервер с использованием сокета, связь работает, если я посылаю извне какую-либо функцию или в пространство определения над рендером, в компоненте моего React.Если я пытаюсь выполнить эмиссию в функции или в области видимости цепочки моего обещания, это не удается.Мне интересно, почему это работает или не работает, так как я определил элементы в действии, и мой тезис console.log возвращает мне их определение.

Вот мой snippet.js:

componentDidMount(){ 
    console.log("on componentDidMount")
    this.socket=io();
    axios.get("https://api.ipify.org/?format=json")
           .then((res) => { 
       // INSIDE THE PROMISE CHAIN'S SCOPE => FAILS TO EMIT ANYTHING 
       // I CAN'T FIGURE OUT WHY => BUT IT WORKS NOW. 
       // MAYBE A RESETTING I HAVE DONE WITHOUT HAVING SPOT THE CHANGEMENT 
       this.socket.emit("join", {ip:56565454654}, function(err){   
       });
    }) 

    // INSIDE A FUNCTION SCOPE IN componentDidMount() => FAILS TO EMIT ANYTHING WHEN CALL FROM PROMISE'CHAIN
    // EDIT => WORKS => HAD TO BE BOUND
    join(ip){  
    } 

    // OUTSIDE ANY FUNCTION SCOPE INSIDE componentDidMount() => EMIT SUCCEED BUT HARD TO HANDLE THE CODE FLOW SINCE IT ISN'T CALLED
    this.socket.on("join",({message})=>{   
    })
}

 // IN DEFINIITION AERA OUTSIDE componentDidMount() => EMIT SUCCEED AND CODE FLOW FRIENDLY 
 join(ip){  
 }

Так почему он работает или не работает?

Так что, в основном, следующий код работает хорошо:

A:

  componentDidMount(){ 
        console.log("on componentDidMount")
        this.socket=io(); 

        axios.get("https://api.ipify.org/?format=json")
        .then((res) => {
            console.log("ip adress: ", res.data.ip ) 
            this.join(res.data.ip) 
        })  
  }
  // IN DEFINIITION AERA OUTSIDE componentDidMount() => EMIT SUCCEED AND CODE FLOW FRIENDLY 
  join(ip){ 
      console.log("this.socket.emit in join(): ", this.socket.emit)
      this.socket.emit("join", {ip}, function(err){ 
        if(err){ 
            alert(err);
            // Router.replace("/");
        } else{ 
            console.log("joinRoom succeed");
        }
      });    
  } 

Любой намек был бы полезен, спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...