Promise / async/await support
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 35/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Estancado
- Stack tecnológico
- javascript, node.js
Línea de trabajo
Empieza por lib/forms.js alrededor de la línea 45, especialmente por los puntos de entrada bind y validate, y revisa el ejemplo de koa async/await. Determina el comportamiento de promesa necesario para boundedForm.validate(); se considera terminado cuando el ejemplo pueda esperar la validación con await sin el wrapper externo.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Hi,
Thanks for this library!
I use koa@2 that supports async/await syntax. My use case is:
const forms = require('forms')
let myForm = forms.create({
username: fields.string({ required: true })
})
// POST request handler
app.use(async function(ctx) {
let boundedForm = myForm.bind(ctx.request.body)
let errors = await boundedForm.validate() // <-- I need syntax like this
if (errors) {
ctx.render('index', {
form: boundedForm.toHTML()
})
} else {
ctx.body = 'form is valid'
}
})
What do you think about support of promises (promisification)?
Currently, I forced to use my wrapper around this library. It promisifies validate function:
const forms = require('forms')
let {create} = forms
forms.create = function (fields, options) {
let form = create(fields, options)
let {bind} = form
form.bind = function (data) {
let boundedForm = bind(data)
// @see https://github.com/caolan/forms/blob/v1.3.0/lib/forms.js#L45
let {validate} = boundedForm
boundedForm.validate = function () {
let deferred = new Deferred()
validate(deferred.resolve)
return deferred.promise
}
return boundedForm
}
return form
}
class Deferred {
constructor() {
this.promise = new Promise(this.onPromise.bind(this))
}
onPromise(resolve, reject) {
this.resolve = resolve
this.reject = reject
}
resolve() {}
reject() {}
}
module.exports = forms
- Lenguaje dominante
- JavaScript
- Estrellas
- 1k
- Forks
- 160
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de caolan/forms
-
Feature Requests Needs More Info
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
-
Cut a new release?Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 20/100
-
Feature Requests pull request wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 25/100
-
simple checkboxAbierto
Dificultad 3/5 1-2 días Aptitud para principiantes 30/100
Todos los issues de caolan/forms
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
jfromaniello/url-join#134 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 60/100
quarto-dev/quarto-cli#15042 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
extendr/extendr.github.io#134 ·