gpt4 book ai didi

javascript - Promise 在调用时返回值而不是 Promise

转载 作者:行者123 更新时间:2023-12-02 21:10:08 25 4
gpt4 key购买 nike

我想在一些 HTTP 和 WS 调用后访问一些数据。我已准备好数据并且想要访问它们。但我取回的不是数据,而是 promise 本身。


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]

问题:如何返回实际的 DATA 而不是 Promise?我做错了什么?

最佳答案

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');

关于javascript - Promise 在调用时返回值而不是 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61121028/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com