考虑这个地图示例
async.map(['file1','file2','file3'], fs.stat, function(err, results) {
// results is now an array of stats for each file
});
除了语法,这基本上没有告诉我什么。 在大多数情况下,人们不会通过fs.stat
。 示例应包括所有可能选项的使用。 所有函数和方法的所有示例都需要更新。 他们太简单了
我同意,我们需要更好的文档。 我还想更改许多示例(或添加 mroe 示例)以使用 async/await。 但是,这是需要时间的事情,我目前没有。
也许我可以帮忙。
我如何帮助举例?
async
/ await
例子,更少的回调foo
/ bar
大多数方法的 JSDoc 注释中有@example
块。 发疯!
注意那个特定的例子,你可以做
await async.map(['file1','file2','file3'], fs.promises.stat);
// or without async lib
await Promise.all(['file1','file2','file3'].map(name => fs.promises.stat(name))
或者如果你想要一个对象作为结果
await async.auto({
file1: async()=>fs.promises.stat('file1'),
file2: async()=>fs.promises.stat('file2')
file3: async()=>fs.promises.stat('file3')
})
// or without async lib
Object.fromEntries(
await Promise.all(['file1','file2','file3'].map(async name => [name, await fs.promises.stat(name)]))
)
我特别在寻找一个(简单的)基于 Promise 的 async.mapLimit 示例,即使没有 async/await。 到目前为止还没有找到任何非回调示例。
@flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js ,如果你不想要await
,你可以用递归函数替换它
嗨,西里尔@caub ,
感谢您的回复。 我并不是特别反对“await”,而是为了“async”模块的“好例子”,我想开始并查看具有基本 Promise 处理的实现,包括 .then .catch。
老实说,我在一般情况下很难将 async 与 Promises 结合使用,所以在使用 async/await 之前,我只想从步骤 1) 开始……
顺便说一句,感谢您分享您的示例,但我不太确定它与异步模块的关系。
我认为“简单的基于 Promise 的示例”是指没有任何库的示例
如果你想要这个图书馆的例子,我相信有很多
是的,所以我一般都可以使用 Promises,而且我了解如何在回调样式中使用“异步”模块。 正如文档所述,如果不提供回调,它将返回一个 Promise。 到目前为止,我不能很好的例子,至少不是 async.map(Limit) 。 由于这个线程是关于文档中的“更好的例子”,我在这里插话...
如前所述,我真的无法使用 Promise 启动并运行它,甚至提出了一个问题。
嗨@caub ,
@romanbalayan不错
我们最常用的方法是async.parallel
和async.auto
,您是否也打算涵盖这些方法?
注意:我认为您可以在 async/await 示例中避免使用 async IIFE (async ()=>{
,以使事情变得更轻松
@caub ,更新了移除 IIFE 的拉取请求。 (使用它在本地测试样品是否真的有效)
是的,我也想尽快介绍流量控制。 如果我对集合示例所做的更改符合此处的期望,我实际上只是在等待反馈。
@romanbalayan你可以做的是将该 PR 分支设置为 github 页面(进入你的异步分支,设置 > Github 页面 > 源:(选择你的 PR 分支)),以便我们可以在http://romanbalayan.github 中预览它
@caub ,好主意。 这样做了,现在应该可以在https://romanbalayan.github.io/async/v3/ 上使用
嗨@caub ,
为流控制方法添加了 Promise 和 async/await 示例 - async.parallel
、 async.series
和async.auto
@romanbalayan不错! https://romanbalayan.github.io/async/v3/docs.html#auto
我觉得回调和承诺示例总是非常相似,可能值得只使用其中一个,因为无论如何在使用承诺时,我们宁愿选择 async/await,它会减轻一些负担
别的好东西!
@caub
我还应该删除 Collections 方法上的 Promises 用法示例吗?
我想是的,你可以
同样对于流控制方法,您可以添加具有异步内部函数的示例,例如:
const delay = (t, v) => new Promise(r => setTimeout(r, t, v));
try {
console.time('parallel')
const results = await async.parallel({
one: async () => delay(200, 1),
two: async () => delay(100, 2),
});
console.timeLog('parallel', results);
// parallel: 200ms { one: 1, two: 2 }
}
catch (err) {
console.log(err);
}
@romanbalayan很棒的工作。 我真希望几天前就找到了您的文档版本! 毕竟,我确实通过反复试验发现了事情是如何运作的,但是使用新示例不会那么痛苦:-)
既然我们有 async/await 和 Promise.all 以及 Promise.allSettled ,我仍然不能 100% 确定某些异步方法的效用 .. 基本上我想知道此时是否有所有方法的本机等效项. (?)
const results = await async.parallel({
one: async () => delay(200, 1),
two: async () => delay(100, 2),
});
将被本地编写:
const results = Object.fromEntries(
await Promise.all(
Object.entries({
one: async () => delay(200, 1),
two: async () => delay(100, 2),
})
.map(async ([k, v]) => [k, await v()])
)
);
最有用的评论
我同意,我们需要更好的文档。 我还想更改许多示例(或添加 mroe 示例)以使用 async/await。 但是,这是需要时间的事情,我目前没有。