Pertimbangkan contoh ini untuk peta
async.map(['file1','file2','file3'], fs.stat, function(err, results) {
// results is now an array of stats for each file
});
Ini pada dasarnya tidak memberi tahu saya apa pun kecuali sintaksis. Dalam kebanyakan kasus, orang tidak akan lulus fs.stat
. Contoh harus mencakup penggunaan semua opsi yang memungkinkan. Semua contoh untuk semua fungsi dan metode perlu diperbarui. Mereka terlalu sederhana
Saya setuju, kami membutuhkan dokumen yang jauh lebih baik. Saya juga ingin mengubah banyak contoh (atau menambahkan lebih banyak contoh) untuk menggunakan async/menunggu. Namun, ini adalah sesuatu yang membutuhkan waktu yang tidak saya miliki saat ini.
Mungkin saya bisa membantu.
Bagaimana saya bisa membantu dengan contoh?
async
/ await
, lebih sedikit dengan panggilan balikfoo
/ bar
Ada @example
blok di komentar JSdoc untuk sebagian besar metode. Tergila-gila!
perhatikan untuk contoh khusus itu, Anda bisa melakukannya
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))
atau jika Anda menginginkan objek sebagai hasilnya
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)]))
)
Saya khususnya mencari contoh (sederhana) berbasis Janji dari async.mapLimit, bahkan tanpa async/menunggu. Sejauh ini belum menemukan contoh non-panggilan balik sama sekali.
@flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js , jika Anda tidak ingin await
, Anda dapat menggantinya dengan fungsi rekursif
Hai Cyril @caub ,
terima kasih untuk balasan Anda. Saya tidak terlalu menentang 'menunggu', melainkan demi 'contoh yang baik' untuk modul 'async' yang ingin saya mulai dan melihat implementasi dengan penanganan Promise dasar, termasuk .then .catch.
Sejujurnya saya kesulitan menggunakan async dengan Janji secara umum, jadi sebelum menggunakan async/menunggu saya hanya ingin memulai dengan langkah 1) ...
Btw., terima kasih telah membagikan contoh Anda, saya tidak begitu yakin bagaimana kaitannya dengan modul async.
Saya pikir dengan "contoh sederhana berbasis Janji", maksud Anda contoh tanpa perpustakaan apa pun
jika Anda ingin contoh dengan perpustakaan ini, saya yakin ada banyak
Benar, jadi saya baik-baik saja secara umum dengan menggunakan Janji, dan juga saya mengerti cara menggunakan modul 'async' dalam gaya panggilan balik. Seperti yang dinyatakan oleh dokumentasi, tanpa panggilan balik yang disediakan, itu akan mengembalikan Janji. Sejauh ini, saya tidak dapat memberikan contoh yang baik, setidaknya tidak untuk async.map(Limit). Karena utas ini tentang 'contoh yang lebih baik' dalam dokumentasi, saya menimpali ini di sini ...
Dan seperti yang dikatakan, saya benar-benar tidak bisa menjalankannya dengan Janji, bahkan mengangkat masalah tentang itu.
Hai @caub , mencoba meningkatkan dokumen untuk metode pengumpulan, menambahkan kasus penggunaan untuk panggilan balik, Janji, dan async/menunggu.
@romanbalaya bagus
metode yang paling sering kami gunakan adalah async.parallel
, dan async.auto
, apakah Anda berencana untuk membahasnya juga?
catatan: Saya pikir Anda dapat menghindari async IIFE (async ()=>{
dalam contoh async/menunggu, untuk membuat segalanya lebih ringan
@caub , memperbarui permintaan tarik untuk menghapus IIFE. (Menggunakannya untuk menguji secara lokal apakah sampel benar-benar berfungsi)
Ya, saya juga ingin segera membahas kontrol aliran. Saya sebenarnya hanya menunggu umpan balik jika perubahan yang saya buat untuk contoh koleksi sesuai dengan harapan di sini.
@romanbalayan yang dapat Anda lakukan adalah mengatur cabang PR itu sebagai halaman github (masuk ke fork async Anda, pengaturan > Halaman Github > Sumber: (pilih cabang PR Anda)) sehingga kami dapat mempratinjaunya di http://romanbalayan.github .io/async/v3/
@caub , ide bagus. Apakah itu, dan harus tersedia sekarang di https://romanbalayan.github.io/async/v3/
Hai @caub ,
Menambahkan sampel Janji dan async/menunggu untuk metode kontrol aliran - async.parallel
, async.series
, dan async.auto
@romanbalaya bagus! https://romanbalayan.github.io/async/v3/docs.html#auto
Saya merasa contoh panggilan balik dan janji selalu sangat mirip, mungkin layak hanya memiliki salah satunya, karena bagaimanapun ketika menggunakan janji, kami lebih suka menggunakan async/menunggu, dan itu akan meringankan hal-hal
Barang bagus lainnya!
@caub
Haruskah saya juga menghapus contoh penggunaan Janji pada metode Koleksi juga?
Saya pikir ya Anda bisa
Juga untuk metode kontrol aliran, Anda dapat menambahkan contoh dengan fungsi dalam async, contoh:
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 kerja bagus. Saya berharap saya telah menemukan versi dokumentasi Anda beberapa hari yang lalu! Saya memang menemukan bagaimana segala sesuatunya bekerja dengan coba-coba, tetapi itu akan tidak terlalu menyakitkan dengan contoh-contoh baru :-)
Saya masih belum 100% yakin tentang kegunaan beberapa metode async sekarang karena kami memiliki async/await dan Promise.all serta Promise.allSettled .. Pada dasarnya saya bertanya-tanya apakah ada padanan asli dari semua metode pada saat ini . (?)
const results = await async.parallel({
one: async () => delay(200, 1),
two: async () => delay(100, 2),
});
akan ditulis secara asli:
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()])
)
);
Komentar yang paling membantu
Saya setuju, kami membutuhkan dokumen yang jauh lebih baik. Saya juga ingin mengubah banyak contoh (atau menambahkan lebih banyak contoh) untuk menggunakan async/menunggu. Namun, ini adalah sesuatu yang membutuhkan waktu yang tidak saya miliki saat ini.