gpt4 book ai didi

javascript - asyn vs sync forEach,map,filter

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:27:34 25 4
gpt4 key购买 nike

查看Asyncunderscore.js 的异步分支似乎存在 Sync forEachmapfilter 的异步版本。

考虑到 Javascript 是单线程的,返回排序、映射、forEached... 数组与将返回值传递给回调函数相比有什么值(value)?

最佳答案

当您对每个项目执行的操作取决于底层异步任务时,像这样的异步迭代函数很有用。

例如,在 Node.js 中,文件系统操作是异步的(它们发生在一个单独的非 JavaScript 线程中,并在完成时调用回调)。例如,如果您想将文件名列表映射到这些文件的信息,您将无法返回映射结果,直到文件系统操作回调。同样,JavaScript 数据库驱动程序往往是异步的(它们在另一个线程中完成工作,并在完成后回调 JavaScript 函数)。

例如,假设您有一个用户 ID 列表(例如涉及 Stack Overflow 问题的用户列表),并且您希望将它们映射到每个用户的详细信息。使用 async.js,可能看起来像这样:

async.map([2389, 6344, 27],
function(id, callback){
database.users.find({ id: id }, function(error, user){
if (error) {
callback(error);
} else {
callback(null, {
name: user.name,
reputation: user.reputation,
picture: user.picture
});
}
})
},
function(error, results){
/* results contains:
[
{ name: "Bob", reputation: 10, picture: "http://…" },
{ name: "Fred", reputation: 2910, picture: "http://…" },
{ name: "Steve", reputation: 25000, picture: "http://…" }
]
*/
}
);

将为数组中的每个项目调用迭代器函数,并将启动数据库查询以获取有关该用户的详细信息。它不会等待每个查询完成后再开始下一个查询。数据库查询可能很快完成,也可能需要一些时间。如果它们是同步的,它们一次只能运行一个。更糟糕的是,JavaScript 线程在数据库查询运行时将无法执行任何其他操作。

这样,数据库查询花费多长时间并不重要。当它们运行时,JavaScript 线程可能空闲,或者它可能停止处理其他事情(比如对服务器的另一个请求)。

当每个数据库请求完成时(它们甚至可能不会按照启动的顺序完成!),它会调用其回调函数,该函数将有关用户的信息放入一个对象中并将其交给它的 回调。 async.js 跟踪到目前为止哪些迭代已返回,并且仅在每个迭代完成时调用最终回调。

您可以在 async.js 文档中找到类似的示例。

在浏览器中,异步操作较少,但您可以使用 async.js 向服务器发出请求,以加载一组资源(如脚本或图像)并确保它们全部加载成功,或在窗口之间发送消息。

关于javascript - asyn vs sync forEach,map,filter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508466/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com