首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >激化多方

激化多方
EN

Stack Overflow用户
提问于 2018-05-25 13:53:38
回答 2查看 1.2K关注 0票数 0

我正在授权多方使用它的form.parse。它工作得很好,但是form.parse没有返回我可以使用的then/catch值的promise。

代码语言:javascript
复制
var Promise = require('bluebird');
var multiparty = Promise.promisifyAll(require('multiparty'), {multiArgs:true})
var form = new multiparty.Form();
form.parse({}).then((data)=>{console.log(data)});
EN

回答 2

Stack Overflow用户

发布于 2018-07-12 17:03:07

以下是我使用内置Promise的解决方案:

代码语言:javascript
复制
const promisifyUpload = (req) => new Promise((resolve, reject) => {
    const form = new multiparty.Form();

    form.parse(req, function(err, fields, files) {
        if (err) return reject(err);

        return resolve([fields, files]);
    });
});

和用法:

代码语言:javascript
复制
const [fields, files] = await promisifyUpload(req)
票数 8
EN

Stack Overflow用户

发布于 2019-07-05 05:57:12

我的解决方案是等待所有部分都读完:

代码语言:javascript
复制
const multipartParser = new Form();
multipartParser.on('error', error => { /* do something sensible */ });

const partLatches: Latch<void, Error>[] = [];
multipartParser.on('part', async part => {
    // Latch must be created and pushed *before* any async/await activity!
    const partLatch = createLatch();
    partLatches.push(partLatch);

    const bodyPart = await readPart(part);
    // do something with the body part

    partLatch.resolve();
});

const bodyLatch = createLatch();
multipartParser.on('close', () => {
    logger.debug('Done parsing whole body');
    bodyLatch.resolve();
});

multipartParser.parse(req);
await bodyLatch;
await Promise.all(partLatches.map(latch => latch.promise));

在您想要进一步处理部件的情况下,这可能很方便,例如解析和验证它们,或者将它们存储在数据库中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50522383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档