Обещание вернуть значение вместо обещания при вызове - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу получить доступ к некоторым данным после некоторых вызовов HTTP и WS. У меня есть готовые данные, и я хочу получить к ним доступ. Но вместо данных я получаю само обещание.


const authenticationRequest = () => axios.post(authenticationUrl, {
  user: username, password
})
  .then((response) => response.data)
  .catch((error) => console.error(console.error('Error Response', error)));


const wsRequest = authenticationRequest().then(reqToken => {
  const webSocketRequest = new WebSocket(topicDataUrl);
  const firstMessage = {
    token: reqToken,
    stats: 2,
    sql: "SELECT * FROM cc_payments LIMIT 100",
    live: false
  };

  var messages = [];

  webSocketRequest.onopen = () => {
    webSocketRequest.send(JSON.stringify(firstMessage));
    webSocketRequest.onmessage = (streamEvent) => {
      of(streamEvent).pipe(
        map(event => JSON.parse(event.data)),
        filter(message => message.type === 'RECORD')
      ).subscribe(message => messages.push(message.data.value));
    };
  };
  return messages; // Here I get my array of Message
});

const data = wsRequest.then(res => res);
console.log(data, 'DATA'); // This returns a Promise<Pending>. with Promsie<value>: Array[100]

Проблема: как вернуть фактические данные вместо обещания? Что я делаю не так?

1 Ответ

1 голос
/ 09 апреля 2020

wsRequest.then(...) возвращает еще одно Обещание, поэтому вы видите Promise<Pending> в своей консоли.

Чтобы получить результат Обещания, вместо

const data = wsRequest.then(res => res);
console.log(data, 'DATA');

вы можете используйте

const data = wsRequest.then(res => console.log(res, 'DATA'));

или, в качестве альтернативы, используйте более современный await подход:

const data = await wsRequest;
console.log(data, 'DATA');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...