如果调用 [stream.write(chunk)][stream-write] 返回 false,则当可以继续写入数据到流时会触发 'drain' 事件。

    1. // 向可写流中写入数据一百万次。
    2. // 留意背压(back-pressure)。
    3. function writeOneMillionTimes(writer, data, encoding, callback) {
    4. let i = 1000000;
    5. write();
    6. function write() {
    7. let ok = true;
    8. do {
    9. i--;
    10. if (i === 0) {
    11. // 最后一次写入。
    12. writer.write(data, encoding, callback);
    13. } else {
    14. // 检查是否可以继续写入。
    15. // 不要传入回调,因为写入还没有结束。
    16. ok = writer.write(data, encoding);
    17. }
    18. } while (i > 0 && ok);
    19. if (i > 0) {
    20. // 被提前中止。
    21. // 当触发 'drain' 事件时继续写入。
    22. writer.once('drain', write);
    23. }
    24. }
    25. }