首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >函数返回从socket.on (socket.io)获取的结果

函数返回从socket.on (socket.io)获取的结果
EN

Stack Overflow用户
提问于 2021-01-16 17:14:31
回答 1查看 132关注 0票数 0

我是socket.io的新手。我在处理socket.on的异步时遇到了一些麻烦,我想知道是否有解决办法或某种方法来为socket.on创建整个功能块

我正在开发一个从MongoDB获取数据的应用程序接口。并在react前端调用这些API。我最近正在尝试做以下事情:

代码语言:javascript
复制
// frontend (onClick function)
const handleOnClick = () => {
    const data = api();
    // do the work
}


// API
const api = () => {
var value;

    // ask for data
    socket.emit("ask-for-data");

    // get respond from database
    socket.on("get-response", (data) => {
        value = data;                       //<- value is correct right here
    });

    //respond from API
    return { value };                       //<- value is undefined

我想让整个函数返回通过socket.io获取的数据。但是,我尝试将async-await添加到API函数中,结果没有任何用处。

代码语言:javascript
复制
// frontend (onClick function)
const handleOnClick = async () => {
    const data = await api();
    // do the work
}


// API
const api = async () => {
var value;

    // ask for data
    socket.emit("ask-for-data");

    // get respond from database
    await socket.on("get-response", (data) => {
        value = data;                       //<- value is correct right here
    });

    //respond from API
    return { value };                       //<- value is undefined

那么,有没有办法确保我可以返回从socket.on获得的值呢?我知道socket.on是作为异步函数处理的,并且API函数将在套接字io完成其任务之前返回。BTW、API和handleOnClick存储在不同的js文件中。耽误您时间,实在对不起!

EN

回答 1

Stack Overflow用户

发布于 2021-01-16 18:28:26

socket.on()不是异步的:这意味着执行流将在不等待任何get-response事件的情况下继续执行,并且您的value变量将为undefined

尝试将您的api函数包装在一个Promise中,它在您使用get-response时会解析,如下所示:

代码语言:javascript
复制
const api = function() {
  return new Promise(function(resolve, reject) {
    socket.emit("ask-for-data");
    socket.on("get-response", (data) => {
      resolve(data);
    })
  });
}

然后

代码语言:javascript
复制
const data = await api();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65748063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档