如何在回调接受多个参数时实现函数的promisify

时间:2015-12-17 11:58:00

标签: javascript promise bluebird

有没有办法在函数中使用多于两个参数的函数?一个例子是node的fs.read,其中回调的三个参数是err,bytes和data。 data参数不会传递给then函数,因此记录undefined:

var fs = require('fs');
var Promise = require('bluebird');
var open = Promise.promisify(fs.open);
var read = Promise.promisify(fs.read);

open('test.txt', 'r')
  .then(function(fd) {
    var buffer = new Buffer(1024);
    read(fd, buffer, 0, buffer.length, null).then(function(bytes, data) {
      console.log(data);
    });
  });

1 个答案:

答案 0 :(得分:11)

我已经回答了我的问题 - 在promisify中使用multiArgs选项,然后使用spread而不是:

var fs = require('fs');
var Promise = require('bluebird');
var open = Promise.promisify(fs.open);
var read = Promise.promisify(fs.read, {multiArgs:true});

open('test.txt', 'r')
  .then(function(fd) {
    var buffer = new Buffer(1024);
    read(fd, buffer, 0, buffer.length, null).spread(function(bytes, data) {
      console.log(data);
    });
  });