用 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} 选项
我是 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} 选项