【问题标题】:Running a variable amount of lines dependent on the number of arguments passed根据传递的参数数量运行可变数量的行
【发布时间】:2023-03-17 18:06:01
【问题描述】:

在尝试启动 npm 库时,我想使用不同数量的输入来运行此代码。我唯一的问题是我无法弄清楚如何完成我想要做的事情。

基本上,我希望函数“testfunc(){}”能够运行特定的代码行,每次用参数替换其中的一部分。示例如下:

  function testfunc{

    for (var i = 0; i < arguments.length; i++) {

    console.log(arguments[1]);
    console.log(arguments[2]);
    console.log(arguments[3]);
    console.log(arguments[4]);
    console.log(arguments[5]);
    }

    }

这是我现在拥有的一个例子。我希望用户能够更改消息的编辑次数。

client.on('message', message => {

if(message.content == '69'){

function sleep(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
    }

const wait = ms => new Promise(resolve => setTimeout(resolve, ms));

function animate() {

    for (var i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);
        message.channel.send(arguments[1]).then((sentMessage) => wait(1*1000).then((waitDone) => sentMessage.edit(arguments[i])))


// message.channel.send(arguments[1]).then((sentMessage) => {
//     wait(1*1000).then((waitDone) => sentMessage.edit(arguments[1])).then((sentMessage) => {
//         wait(1*1000).then((waitDone) => sentMessage.edit(arguments[2])).then((sentMessage) => {
//             wait(1*1000).then((waitDone) => sentMessage.edit(arguments[3])).then((sentMessage) => {
//                 wait(1*1000).then((waitDone) => sentMessage.edit(arguments[4]))
//                 })
//             })
//         })
//     })
// }

}

animate('1','2','3','4')

}}})
client.login(token);

我敢肯定,这里可能有一个简单的答案,我已经开始研究做一个 while 循环的想法,但我不太明白......

【问题讨论】:

  • 只是为了让我正确理解您的问题 - 您想像 animate 函数的参数长度一样频繁地运行 sendwaitedit 的序列?
  • @eol 我只需要将 sendedit 变量设置为不同的参数,然后按照长度运行这些变量。 wait 被定义为一秒,以便不受 API 的速率限制。
  • 好的,我想我明白了,会发布答案:)

标签: javascript node.js variables arguments discord


【解决方案1】:

使用async/await 可以大大简化。基本上,您只需遍历函数的参数,并等待每个异步调用,然后再继续下一个参数:

async function animate() {
    // send with the first argument
    const sentMessage = await message.channel.send(arguments[0]);
    // continue editing with the remaining args
    for (let i=1; i < arguments.length; i++) {
        await wait(1000);
        await sentMessage.edit(arguments[i]);
    }
}

【讨论】:

  • 这正是我所需要的,只花了大约 2 个月的时间编写代码。感谢您的帮助:)
  • 乐于助人:)
猜你喜欢
  • 2010-09-17
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2014-12-04
  • 1970-01-01
相关资源
最近更新 更多