Async: La documentación necesita mejores ejemplos

Creado en 14 ene. 2019  ·  21Comentarios  ·  Fuente: caolan/async

Considere este ejemplo para el mapa

async.map(['file1','file2','file3'], fs.stat, function(err, results) {
    // results is now an array of stats for each file
});

Esto básicamente no me dice nada excepto la sintaxis. En la mayoría de los casos, la gente no va a pasar fs.stat . Los ejemplos deben incluir el uso de todas las opciones posibles. Todos los ejemplos de todas las funciones y métodos deben actualizarse. Son demasiado simplistas

docs help wanted

Comentario más útil

Estoy de acuerdo, necesitamos documentos mucho mejores. También me gustaría cambiar muchos de los ejemplos (o agregar ejemplos de mroe) para usar async / await. Sin embargo, esto es algo que lleva tiempo que no tengo en este momento.

Todos 21 comentarios

Estoy de acuerdo, necesitamos documentos mucho mejores. También me gustaría cambiar muchos de los ejemplos (o agregar ejemplos de mroe) para usar async / await. Sin embargo, esto es algo que lleva tiempo que no tengo en este momento.

Quizás pueda ayudar.

¿Cómo puedo ayudar con ejemplos?

  • Ejemplos con más async / await , menos con devoluciones de llamada
  • Más ejemplos concretos de aplicaciones del mundo real, menos foo / bar
  • Cosas que muestran el "punto óptimo" para Async: cosas que son difíciles de hacer sin la biblioteca
  • Los ejemplos son accesibles para los recién llegados a Node / JS que muestran cómo fluyen los parámetros
  • Ejemplos más completos que muestran más características de métodos individuales

Hay bloques @example en los comentarios de JSDoc para la mayoría de los métodos. ¡Vuélvete loco!

nota para ese ejemplo en particular, podría hacer

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))

o si quieres un objeto como resultado

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)]))
)

En particular, estoy buscando un ejemplo (simple) basado en Promesas de async.mapLimit, incluso sin async / await. No he encontrado ningún ejemplo que no sea de devolución de llamada hasta ahora.

@flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js , si no quieres await , puedes reemplazarlo por una función recursiva

Hola Cyril @caub ,
gracias por su respuesta. No estoy particularmente en contra de 'await', sino por el bien de los 'buenos ejemplos' para el módulo 'async' con el que me gustaría comenzar y ver una implementación con el manejo básico de Promise, incluido. Then .catch.
Honestamente, me cuesta usar async con Promises en general, así que antes de usar async / await me gustaría comenzar con el paso 1) ...
Por cierto, gracias por compartir su ejemplo, aunque no estoy completamente seguro de cómo se relaciona con el módulo asincrónico.

Pensé que con "ejemplo simple basado en promesas", te referías a un ejemplo sin biblioteca

si quisiera un ejemplo con esta biblioteca, estoy seguro de que hay muchos

Correcto, estoy bien en general con el uso de Promises, y también entiendo cómo usar los módulos 'async' en el estilo de devolución de llamada. Como indica la documentación, sin devoluciones de llamada proporcionadas, devolvería una Promesa. Hasta ahora, no pude encontrar buenos ejemplos, al menos no para async.map (Limit). Como este hilo trata sobre 'mejores ejemplos' en la documentación, intervine en esto aquí ...
Y como dije, tampoco pude ponerlo en marcha con una Promesa, ni siquiera planteé un problema al respecto.

Hola @caub ,

@romanbalayan agradable

los métodos que más usamos son async.parallel , y async.auto , ¿planeas cubrirlos también?

nota: creo que podría evitar el IIFE asíncrono (async ()=>{ en ejemplos asíncronos / en espera, para aligerar las cosas

@caub , solicitud de extracción actualizada para eliminar IIFE. (Lo estaba usando para probar localmente si las muestras realmente funcionaban)

Sí, también me gustaría cubrir pronto el control de flujo. En realidad, solo estaba esperando comentarios si los cambios que hice para los ejemplos de la colección coinciden con las expectativas aquí.

@romanbalayan, lo que podría hacer es configurar esa rama de relaciones públicas como página github (vaya a su bifurcación de async, configuración> páginas de Github> Fuente: (elija su rama de relaciones públicas)) para que podamos obtener una vista previa en http: //romanbalayan.github .io / async / v3 /

@caub , gran idea. Hice eso, y debería estar disponible ahora en https://romanbalayan.github.io/async/v3/

Hola @caub ,

Se agregaron muestras Promise y async / await para métodos de control de flujo: async.parallel , async.series y async.auto

@romanbalayan ¡agradable! https://romanbalayan.github.io/async/v3/docs.html#auto

Siento que los ejemplos de devoluciones de llamada y promesas son siempre bastante similares, probablemente valga la pena tener solo uno de ellos, ya que de todos modos cuando usamos promesas, preferimos optar por async / await, y aligeraría las cosas.

¡Buenas cosas más!

@caub

¿Debo eliminar también el ejemplo de uso de Promesas en los métodos de Cobranzas?

Creo que si tu podrías

También para los métodos de control de flujo, puede agregar ejemplos con funciones internas asíncronas, ejemplo:

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 gran trabajo. ¡Ojalá hubiera encontrado su versión de la documentación hace unos días! Después de todo, descubrí cómo funcionan las cosas por prueba y error, pero hubiera sido menos doloroso con los nuevos ejemplos :-)
Todavía no estoy 100% seguro de la utilidad de algunos de los métodos asíncronos ahora que tenemos async / await y Promise.all así como Promise.allSettled .. Básicamente me pregunto si hay equivalentes nativos de todos los métodos en este momento . (?)

const results = await async.parallel({
    one: async () => delay(200, 1),
    two: async () => delay(100, 2),
});

estaría escrito de forma nativa:

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()])
  )
);
¿Fue útil esta página
0 / 5 - 0 calificaciones