我想在进行一些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]
问题: 如何返回实际数据而不是Promise?我在做什么错了?
答案 0 :(得分:1)
wsRequest.then(...)
返回了另一个Promise,所以这就是为什么您在控制台中看到Promise<Pending>
的原因。
要获取Promise的结果,而不是
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');