Async: Dokumentasi membutuhkan contoh yang lebih baik

Dibuat pada 14 Jan 2019  ·  21Komentar  ·  Sumber: caolan/async

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

docs help wanted

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.

Semua 21 komentar

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?

  • Contoh dengan lebih banyak async / await , lebih sedikit dengan panggilan balik
  • Lebih banyak contoh konkret dari aplikasi dunia nyata, lebih sedikit foo / bar
  • Hal-hal yang menunjukkan "titik manis" untuk Async -- hal-hal yang sulit dilakukan tanpa perpustakaan
  • Contoh dapat diakses oleh pendatang baru ke Node/JS yang menunjukkan bagaimana parameter mengalir
  • Contoh yang lebih komprehensif menunjukkan lebih banyak fitur dari metode individual

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()])
  )
);
Apakah halaman ini membantu?
0 / 5 - 0 peringkat