マップのこの例を検討してください
async.map(['file1','file2','file3'], fs.stat, function(err, results) {
// results is now an array of stats for each file
});
これは基本的に構文以外は何も教えてくれません。 ほとんどの場合、人々はfs.stat
を渡すつもりはありません。 例には、考えられるすべてのオプションの使用を含める必要があります。 すべての関数とメソッドのすべての例を更新する必要があります。 それらは単純すぎます
私は同意します、私たちははるかに良いドキュメントが必要です。 また、async / awaitを使用するように、多くの例を変更(またはmroeの例を追加)したいと思います。 しかし、これは今のところ時間がないものです。
多分私は助けることができます。
どうすれば例を手伝うことができますか?
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)]))
)
私は特に、async / awaitがなくても、(単純な)Promiseベースのasync.mapLimitの例を探しています。 これまでのところ、コールバック以外の例はまったく見つかりませんでした。
@flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js、$#$ await
が必要ない場合は、再帰関数に置き換えることができます
こんにちはシリル@caub 、
お返事をありがとうございます。 私は特に「await」に反対しているわけではなく、「async」モジュールの「良い例」のために、.then.catchを含む基本的なPromise処理の実装を見てみたいと思います。
私は正直に言って、Promisesでasyncを使用するのに苦労しているので、async / awaitを使用する前に、ステップ1)から始めたいと思います...
ところで、あなたの例を共有してくれてありがとう、それが非同期モジュールにどのように関連しているかは完全にはわかりません。
「単純なPromiseベースの例」とは、ライブラリのない例を意味すると思いました
このライブラリの例が必要な場合は、たくさんあると思います
そうです、私は一般的にPromisesを使用しても問題ありません。また、コールバックスタイルで「async」モジュールを使用する方法も理解しています。 ドキュメントに記載されているように、コールバックが提供されていないと、Promiseが返されます。 これまでのところ、少なくともasync.map(Limit)については、良い例を見つけることができませんでした。 このスレッドはドキュメントの「より良い例」に関するものなので、ここでこれについて説明しました...
そして、言ったように、私はそれをPromiseで起動して実行することもできず、それについても問題を提起しました。
こんにちは@caub 、コレクションメソッドのドキュメントを改善し、コールバック、Promises、async / awaitのユースケースを追加することに
@romanbalayanいいね
私たちが最もよく使用する方法はasync.parallel
とasync.auto
、それらもカバーする予定ですか?
注:async / awaitの例ではasyncIIFE (async ()=>{
を避けて、物事を軽くすることができると思います
@ caub 、
はい、フロー制御についてもすぐに説明したいと思います。 コレクションの例に加えた変更がここでの期待と一致する場合、私は実際にフィードバックを待っていました。
@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
コールバックとpromiseの例は常に非常に似ているように感じます。おそらく、そのうちの1つだけを使用する価値があります。とにかく、promiseを使用するときは、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()])
)
);
最も参考になるコメント
私は同意します、私たちははるかに良いドキュメントが必要です。 また、async / awaitを使用するように、多くの例を変更(またはmroeの例を追加)したいと思います。 しかし、これは今のところ時間がないものです。