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

kan*_*ney 5 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);
    });
  });
Run Code Online (Sandbox Code Playgroud)

kan*_*ney 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);
    });
  });
Run Code Online (Sandbox Code Playgroud)