使用promisifyAll bluebird包装node-multiparty

时间:2015-06-09 11:55:52

标签: node.js bluebird

我是node.js的新手,我正在尝试用bluebird包装节点 - 多方回调,但是multiparty的parse函数签名是函数(错误,字段,文件),promise签名只需要一个返回值。 我确定有办法做到这一点,但我还没有找到任何东西。

提前致谢!

2 个答案:

答案 0 :(得分:2)

有同样的问题。不幸的是,victorkohl的解决方案对我来说不起作用,因为解析的回调传递2参数(字段和文件) 由

修正
    var multiparty = Promise.promisifyAll(require('multiparty'), {multiArgs:true})

注意:{multiArgs:true}选项

答案 1 :(得分:1)

使用spread代替then。以自述文件中的例子为例:

var Promise = require('bluebird');
var multiparty = Promise.promisifyAll(require('multiparty'));
var http = require('http');
var util = require('util');

http.createServer(function(req, res) {
  if (req.url === '/upload' && req.method === 'POST') {
    // parse a file upload
    var form = new multiparty.Form();

    // USE `spread` INSTEAD OF `then` HERE 
    form.parseAsync(req).spread(function(fields, files) {
      res.writeHead(200, {'content-type': 'text/plain'});
      res.write('received upload:\n\n');
      res.end(util.inspect({fields: fields, files: files}));
    });

    return;
  }
}).listen(3000);