回调不是异步库中的函数

Posted

技术标签:

【中文标题】回调不是异步库中的函数【英文标题】:callback is not a function inside async library 【发布时间】:2021-11-11 21:58:00 【问题描述】:

我创建了这个小代码来重现我在应用程序中遇到的错误:

const async = require("async");

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


const parallels = [];

for (let i = 0; i < 2; i++) 
  parallels.push(async function (callback) 
    const randomSleepTime = Math.ceil(Math.random() * 10000);
    await sleep(randomSleepTime);
    callback(randomSleepTime);
  );


async.parallel(parallels, function (err, results) 
  console.log(err);
  console.log(results);
);

完成后我收到此错误:TypeError: callback is not a function 究竟为什么会发生这种情况?

【问题讨论】:

删除异步。回调已经是异步的。 你为什么使用 async.js 而不是 promises? @zyrup 我需要它在函数内运行 await ,该函数将与其他函数并行触发 (await sleep()) @Bergi 有没有什么办法可以通过 Promise 实现并行运行具有 await 的循环?如果您能分享一个链接,将不胜感激,因为我似乎找不到任何东西。 @CedricHadjian 在你的循环中创建一个promise数组,然后使用Promise.all 【参考方案1】:

解决方案是返回值而不是使用callback() 提到的here。

【讨论】:

以上是关于回调不是异步库中的函数的主要内容,如果未能解决你的问题,请参考以下文章

回调不是使用节点 js 的异步模块的 mongodb 查询中的函数

nodejs异步回调函数中this问题,求助

JS高阶五(JS中的异步编程下)

node.js中的forEach是同步还是异步

异步回调函数

nodejs是同步还是异步