使用ES6类时链接承诺

时间:2016-11-30 21:00:24

标签: google-app-engine promise ecmascript-6

我使用以下代码将文件上传到Google云,然后获取公共网址。但是,在将承诺链接起来时很快就会变得混乱。

在我的例子中,有没有人可以帮助以更清洁的方式链接承诺?

QFile qF(":/file.csv");
if (qF.open(QFile::ReadOnly))
{
    QTextStream qTS(&qF);
    CSVReader csvReader(qTS.readAll().toStdString());
}

我包含了我的ImageUploader类,就像这样一个FYI。任何其他最佳实践建议也非常受欢迎。

let routes = function(imageUploader) {
    router.post('/upload',
        imageUploader.getMulter().single('image'),
        (req, res) => {
            imageUploader.uploadFilePromise(req.file.path)
                .then((filename, error) => {
                    if(error) throw new Error(error);
                    imageUploader.getExternalUrl(filename)
                        .then((publicUrl, error) => {
                            if(error) throw new Error(error);
                            console.log(publicUrl);
                        })

                })
    });

    return router;
};

2 个答案:

答案 0 :(得分:4)

传递给then()的回调只接收一个参数,而不是两个参数。

它可以(应该)返回一个值或另一个承诺,以便进一步链接。

如果其中一个回调抛出,或者返回被拒绝的承诺,您可以使用链末尾的catch来处理错误:

imageUploader.uploadFilePromise(req.file.path)
    .then(filename => imageUploader.getExternalUrl(filename))
    .then(publicUrl => console.log(publicUrl))
    .catch(error -> console.log(error));

答案 1 :(得分:0)

简单地说,用.then链接承诺,我发现不添加缩进更清晰。

离。

promise  
.then(do something)  
.then(do something else);