用 promisifyAll bluebird 包装节点多方

wrap node-multiparty with promisifyAll bluebird

我是 node.js 的新手,我正在尝试用 bluebird 包装节点多方回调,但多方的解析函数签名是 function(err, fields, files) 并且 promise 签名只需要一个 return 值。 我确定有办法做到这一点,但我还没有找到任何东西。

提前致谢!

使用 spread 而不是 then。从他们的 README 中的示例中获取:

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);

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

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

注意:{multiArgs:true} 选项