Promise / async/await support
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 35/100
- Loại issue
- Tính năng
- Độ rõ ràng
- Khá rõ ràng
- Mức độ hoạt động
- Đình trệ
- Công nghệ
- javascript, node.js
Hướng nghiên cứu
Bắt đầu với lib/forms.js quanh dòng 45, đặc biệt là các điểm vào bind và validate, và xem lại ví dụ koa async/await. Xác định hành vi promise cần thiết cho boundedForm.validate(); hoàn thành nghĩa là ví dụ có thể await việc xác thực mà không cần wrapper bên ngoài.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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
- Ngôn ngữ chính
- JavaScript
- Star
- 1k
- Fork
- 160
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
Dự án này không cung cấp dev container, Dockerfile hay hướng dẫn đóng góp, nên bạn cần tự thiết lập môi trường: hãy bắt đầu từ README và xem hướng dẫn đóng góp lần đầu của chúng tôi để biết các bước chung.
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của caolan/forms
-
Feature Requests Needs More Info
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
-
Cut a new release?Đang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
-
Feature Requests pull request wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 45/100
-
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 25/100
-
simple checkboxĐang mở
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 30/100
Issue tương tự
-
Four problem loader browser tests fail on WindowsCó thể đã có người làm @Patriciaath999 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 85/100
juice-shop/juice-shop#3686 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
ScottKirvan/GOMAC#56 ·
-
area:install bug needs-triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
Maintainer thường phản hồi trong vòng 2 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
yetone/magpie#2406 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày