[BUG] `maxBatchSize: NaN` is accepted and silently disables batching

Đang mở Phù hợp với người mới
#405 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

@RaphaelFakhri đang làm issue này rồi.

Từ ngày 5/11/2026.

  • #406 của @RaphaelFakhri — đang mở

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
82/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
javascript, node.js
Lĩnh vực
backend, performance

Hướng nghiên cứu

Đọc getValidMaxBatchSize và phần xác thực trong constructor ở mã nguồn DataLoader; issue chỉ ra phép so sánh bị lỗi và điều kiện kiểm tra dự kiến. Tìm các bài kiểm tra hiện có cho phần xác thực maxBatchSize và bổ sung kiểm thử cho NaN. Hoàn tất khi việc khởi tạo với NaN ném ra TypeError như mong đợi và các bài kiểm tra liên quan đều đạt.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

new DataLoader(fn, { maxBatchSize: NaN }) throws TypeError: maxBatchSize must be a positive number: NaN, the same as it does for 0, negative numbers, and non-numbers.

Current Behavior

The constructor accepts NaN. getCurrentBatch then compares keys.length < NaN, which is always false, so every load() call starts a new batch. Batching is turned off without any error or warning.

Possible Solution

In getValidMaxBatchSize, replace maxBatchSize < 1 with !(maxBatchSize >= 1) so that NaN fails the check.

Steps to Reproduce

const DataLoader = require('dataloader');

const calls = [];
const loader = new DataLoader(
  async keys => {
    calls.push(keys);
    return keys;
  },
  // For example, read from an environment variable that is not set.
  { maxBatchSize: Number(process.env.MAX_BATCH_SIZE) },
);

Promise.all([loader.load(1), loader.load(2), loader.load(3)]).then(() =>
  console.log(JSON.stringify(calls)),
);
// Prints [[1],[2],[3]]. Expected a TypeError from the constructor.

Context

maxBatchSize often comes from configuration, for example Number(process.env.X) or parseInt(value, 10). Both return NaN when the value is missing or invalid. The loader keeps working, but it sends one request per key, and nothing points to the misconfiguration.

Ngôn ngữ chính
JavaScript
Star
13.4k
Fork
522
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

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của graphql/dataloader

Tất cả issue của graphql/dataloader

Issue tương tự

Thêm issue về JavaScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.