Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

'await' won't work even in an async function

I googled this but can't find a result that relates to my problem. I put 'await' in an async function but node.js says "SyntaxError: Unexpected identifier". Can someone help? I just started learning JavaScript recently.

async function removeFile(data) {
    return new Promise((resolve, reject) => {
        try {
            if (!data.arg) {
                //check if there's filename
                data.msg.channel.send("What did you want me to remove baka?").then(async result => {
                    data.client.setTimeout(data.tsundere, 5000, result);
                });
            } else {
                //check if there's repo id in the config file (Personal)
                if (!data.config.group && !data.config.repo_id) {
                    data.msg.channel.send("Hmmph! Please set the repo channel ID in the config file first?");
                    //check if the channel is valid (Personal)
                } else if (!data.config.group && !data.msg.guild.channels.has(data.config.repo_id)) {
                    data.msg.channel.send("You just wasted my time finding an inexistent channel!");
                    //check if the repo channel is set through the repo command
                } else if (data.config.group) {
                    data.shimautils.sdataCheck(data.sdata, data.msg.guild.id).then(onRes => {
                        if (onRes.length < 1) {
                            data.msg.channel.send("There's no repo channel set!");
                        } else {
                            //insert good stuff here
                            data.msg.channel.send("This command is WIP!");
                            let gch = data.msg.guild.channels.get(data.sdata.get(data.msg.guild.id)[0]),
                                temp;
                            //the problem lies here
                            await getMessages(data.msg.guild, data.msg.channel);
                            console.log(temp);
                            data.msg.channel.send(temp.size);
                        }
                    }, async () => {
                        data.msg.channel.send("There's no repo channel set!");
                    });
                } else {
                    //insert good stuff here (Personal)
                    data.msg.channel.send("This command is WIP!");
                }
            }
        } catch (err) {
            reject(err)
        }
        resolve(true);
    });
}

edit: Here is the content of getMessages() getMessages() is used to get messages in a channel.

async function getMessages(guild, channel) {
    return new Promise(async (resolve, reject) => {
        try {
            if (!channel.id) {
                reject(false);
            } else if (!guild.channels.has(channel.id)) {
                reject(false);
            } else {
                var fetchedMessages, fetchedSize, plscontinue = true,
                    firsttime = true;
                channel.fetchMessages({
                    'limit': 100
                }).then(async result => {
                    fetchedMessages = result.clone();
                }, async rej => {
                    reject(rej);
                });
                while (plscontinue) {
                    if (firsttime) {
                        fetchedSize = fetchedMessages.size;
                        firsttime = false;
                    }
                    if (fetchedSize == 100) {
                        plscontinue = true;
                        channel.fetchMessages({
                            'limit': 100,
                            'before': fetchedMessages.lastKey()
                        }).then(async fetched2 => {
                            fetchedSize = fetched2.size;
                            fetchedMessages = fetchedMessages.concat(fetchedMessages, fetched2)
                        }, async err => reject(err));
                    } else {
                        plscontinue = false;
                    }
                }
            }
        } catch (err) {
            reject(err);
        }
        resolve(fetchedMessages);
    });
}
like image 534
Takase Avatar asked Oct 29 '22 15:10

Takase


1 Answers

You can only use await directly inside the async function. And you dont need to construct a Promise, thats what async function is doing for you internally. Additionally, the sense of await is to replace the callbacks and then chains:

 async function removeFile(data) {
   if (!data.arg) {
     //check if there's filename
     const result = await data.msg.channel.send("What did you want me to remove baka?")
     data.client.setTimeout(data.tsundere, 5000, result);           
    } else {
        //check if there's repo id in the config file (Personal)
        if (!data.config.group && !data.config.repo_id) {
            await data.msg.channel.send("Hmmph! Please set the repo channel ID in the config file first?");
            //check if the channel is valid (Personal)
        } else if (!data.config.group && !data.msg.guild.channels.has(data.config.repo_id)) {
            await data.msg.channel.send("You just wasted my time finding an inexistent channel!");
            //check if the repo channel is set through the repo command
        } else if (data.config.group) {
          const onRes = await data.shimautils.sdataCheck(data.sdata, data.msg.guild.id);
          if (onRes.length < 1) {
            await data.msg.channel.send("There's no repo channel set!");
           } else {
             //insert good stuff here
             await data.msg.channel.send("This command is WIP!");
             let gch = data.msg.guild.channels.get( data.sdata.get(data.msg.guild.id)[0]);

             const temp = await getMessages(data.msg.guild, data.msg.channel);
             await data.msg.channel.send(temp.size);
          }

          await data.msg.channel.send("There's no repo channel set!");

        } else {
          //insert good stuff here (Personal)
          await data.msg.channel.send("This command is WIP!");
       }
   }
   return true;
 }

The same applies to getMessage :

 async function getMessages(guild, channel) {
    if (!channel.id) {
      throw false; //???
    } else if (!guild.channels.has(channel.id)) {
      throw false; //???
    }

    let fetchedMessages = await channel.fetchMessages({ 'limit': 100 });        
    const result = fetchedMessages.clone();            

    while (fetchedMessages.length >= 100) {
         fetchedMessages = await channel.fetchMessages({
              limit: 100,
              before: fetchedMessages.lastKey()
         });
        result.push(...fetchedMessages);
    }
    return result;
 }
like image 161
Jonas Wilms Avatar answered Nov 01 '22 02:11

Jonas Wilms