javascript - 根据传递的参数数量运行可变数量的行
问题描述
我想用不同数量的输入运行这段代码,因为我正在尝试启动一个 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循环的想法,但我不太明白......
解决方案
使用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]);
}
}
推荐阅读
- reporting-services - SSRS 按多个字段和分组分组
- c# - Fixing badly formatted string with number and thousands seperator
- html - 如何在没有 tabindex 的情况下将 HTML 表格标签顺序从水平更改为垂直?
- wordpress - 从 wordpress 菜单中删除元素
- static-analysis - 如何在特定代码路径上触发静态分析器警告?
- wso2 - WSO2 身份服务器 ciphertool.bat 脚本抛出 InvalidPathException
- swift - 在 Swift 中操作泛型集合
- css - 向动画滑块添加另外两个项目
- sql - DayofWeek, Year & Shiftname
- javascript - 分配假返回未定义