【问题标题】:How to execute async function如何执行异步功能
【发布时间】:2020-11-07 00:45:08
【问题描述】:

我是 React 和 Socket.io 的新手。我下面的异步函数没有执行。我的套接字发射工作正常,因为控制台记录了“收到的消息”。然而,没有别的了。

socket.on('connected', function(data) {    
    //load all messages
    console.log('message received');
    (async () => {
        try {
            console.log('searching for Schema');
            const conversation = await Conversation.find({roomId: data.roomid}).populate('messages').lean().exec();
            const mess = conversation.map();    
            console.log('Schema found');    
        }
        catch (error) {
            console.log('Schema being created');
            Conversation.create({type: data.roomid});
        }
    });
});

【问题讨论】:

  • 请至少正确格式化您的代码。
  • 我已经格式化了你的代码,现在可以看到你甚至没有执行你的异步方法。
  • @choz from stackoverflow.com/questions/52675041/… 我认为如果用括号括起来它会自动执行。我将如何执行它?
  • @asdfcoder ()?
  • @asdfcoder 是的,只是() - 或者不要制作 IIFE,并创建自己的单独块。

标签: javascript reactjs async-await socket.io


【解决方案1】:

您实际上并没有调用异步方法,只是定义它并继续前进。

试试这个:

const searchForSchema = async (data) => {
    try {
        console.log('searching for Schema');
        const conversation = await Conversation.find({roomId: data.roomid}).populate('messages').lean().exec();
        const mess = conversation.map();    
        console.log('Schema found');    
    }
    catch (error) {
        console.log('Schema being created');
        Conversation.create({type: data.roomid});
    }
}
    
socket.on('connected', (data) => {    
    //load all messages
    console.log('message received');
    await searchForSchema(data);
});

【讨论】:

  • data 超出searchForSchema 的范围
  • 更新它以作为参数传递。
【解决方案2】:

只需执行你的函数,在末尾添加“()”:

socket.on('connected', function(data) {    
    //load all messages
    console.log('message received');
    (async () => {
        try {
            console.log('searching for Schema');
            const conversation = await Conversation.find({roomId: data.roomid}).populate('messages').lean().exec();
            const mess = conversation.map();    
            console.log('Schema found');    
        }
        catch (error) {
            console.log('Schema being created');
            Conversation.create({type: data.roomid});
        }
    })(); // <- just this
});

我建议你单独创建一个函数,看起来会更好更清晰。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2012-11-18
    • 2019-10-04
    • 2021-11-04
    • 2014-04-04
    相关资源
    最近更新 更多