当前位置: 首页 > 知识库问答 >
问题:

node.js-类中的async方法用于许诺循环[重复]

陶高扬
2023-03-14

我需要执行一个外部请求计时器的承诺链。 正如有人在类似的线程中建议的那样,我使用了async/await并对其进行了一点重写:

class myClass{
    constructor(symbols){
     this.downloadCsv(symbols)
    }

    // async/await method executing requests with timer
    static async downloadCsv(symbols){
        const result = [];
        symbols.forEach(symbol => {
           await timer(1000)
           result.push(await this.downloadOneCsv(symbol['symbol']) )
        }
        return result
    }

    downloadOneCsv(symbol){
    //request goes here
    }
}

在执行上面的代码时,我不断收到一条错误消息,提示Async/Await无效:

     await timer(1000)
     ^^^^^

SyntaxError:await仅在async函数中有效

我该怎么修好呢?

共有1个答案

桂高义
2023-03-14

首先,您不能在foreach中使用计时器,因为它的性质和调用回调函数的数量与堆栈中的数组元素的数量一样多。 在将async关键字添加到回调函数之后,该计时器方法将只触发一次,其他时间将被跳过。 我建议对该数组使用forof循环。

static async downloadCsv(symbols){
    const result = [];
    for (const symbol of symbols) {
       await timer(1000)
       result.push(await this.downloadOneCsv(symbol['symbol']) )
    }
    return result;
}

null

const timer = ms => new Promise(resolve => setTimeout(resolve, ms));
const arr = [1, 2, 5, 6, 7];

arr.forEach(async item => {
  console.log('Before Timer');
  await timer(1000);
  console.log(item);
});
 类似资料:
  • 问题内容: for (let i = 0; i < 10; i++) { const promise = new Promise((resolve, reject) => { const timeout = Math.random() * 1000; setTimeout(() => { console.log(i); }, timeout); }); 上面将给出以下随机输出: 任务很简单:确保每

  • 问题内容: 基本上,我需要一种方法来将控制返回到for循环的开头, 并 在满足特定条件后采取措施后 实际上重新启动整个迭代过程 。 我想做的是这样的: 这样,如果[‘berry’,’||’,’||’,’||’,’pancake]在列表中,我会得出以下结论: 而是[‘berry’,’||’,’pancake’]。 谢谢! 问题答案: 我不确定“重新启动”是什么意思。您是要从头开始进行迭代,还是只是跳

  • 问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会执行您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预

  • 问题内容: 我对工作方式有些困惑。我正在尝试在循环中添加一个,以便循环迭代之间相距1秒。每次循环迭代都会发出一个HTTP请求,而另一端的服务器似乎无法在这么短的时间内处理那么多请求。 为什么这不起作用,我如何实现呢? 谢谢 问题答案: 你需要这样的东西 另请参阅此小提琴 此时,您可以致电服务器。请注意,计数器的工作方向相反(递减计数)。我更新了一些注释,说明在哪里可以做您的事情。

  • 我对Java中枚举类型中的值()方法是如何工作的有点好奇。如Java规范文档中所见,我们可以在a中为每个循环遍历某个枚举类型的所有值。例如。 我认为对于每个循环,迭代所有值。在这个调用中,我们在每个循环调用中重复调用一个方法,那么它将如何迭代所有枚举类型或值()方法使用某种迭代器。有人能帮我记录下这个方法的实现吗?

  • 我想为我的网格创建分页链接。我将maxPages(number)属性传递给组件,但我不能在render方法中使用。我能做什么?

  • 问题内容: 如何正确构造一个循环以确保以下的 promise调用 和链接的 logger.log(res) 通过迭代同步运行? 尽管它似乎有效,但是我认为它不能保证调用 logger.log(res); 的顺序 。 有什么建议? 问题答案: 我不认为这可以保证调用logger.log(res)的顺序; 实际上,确实如此。该语句在调用之前执行。 有什么建议? 很多。最重要的是您使用手动创建承诺反模式

  • 本文向大家介绍C#中for循环、while循环循环执行的方法,包括了C#中for循环、while循环循环执行的方法的使用技巧和注意事项,需要的朋友参考一下 先给大家介绍下C#中的循环执行for循环 在这一节练习中,我们向大家介绍一下C#中的另一种重要的循环语句,for循环。 表达式1:一般为赋值表达式,给控制变量赋初值; 表达式2:逻辑表达式,循环控制条件;当条件为真时,循环执行循环体中的语句。