首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只回最里面的承诺,抓住和处理别人

只回最里面的承诺,抓住和处理别人
EN

Stack Overflow用户
提问于 2017-03-18 17:00:30
回答 1查看 56关注 0票数 1

我有以下情况:

代码语言:javascript
复制
savePicture(newPicture, fileData){
    return compressionUtil.makePictureAndThumbnail(newPicture).then((data) => {
        let writeBig = fsUtil.writeFileToDisk(pictureFileName, data[0])
        let writeSmall = fsUtil.writeFileToDisk(thumbnailFileName, data[1])

        return Promise.all([writeBig, writeSmall]).then(() => {
            let picToSave = {
                uploaderUsername: fileData.username,
                directory: fileDirectory,
                fileName: fileName,
                tags: fileData.tags,
                description: fileData.description,
                droneTaken: fileData.droneTaken,
                isGenuine: isGenuine,
                metadata: metadata
            }
            return Picture.create(picToSave)
        })
    })
}

我想做的是处理可能拒绝compressionUtil.makePictureAndThumbnail()Promise.all([writeBig, writeSmall])的承诺,就像这样

代码语言:javascript
复制
savePicture(newPicture, fileData){
    return compressionUtil.makePictureAndThumbnail(newPicture).then((data) => {
        let writeBig = fsUtil.writeFileToDisk(pictureFileName, data[0])
        let writeSmall = fsUtil.writeFileToDisk(thumbnailFileName, data[1])

        return Promise.all([writeBig, writeSmall]).then(() => {
            let picToSave = {
                uploaderUsername: fileData.username,
                directory: fileDirectory,
                fileName: fileName,
                tags: fileData.tags,
                description: fileData.description,
                droneTaken: fileData.droneTaken,
                isGenuine: isGenuine,
                metadata: metadata
            }
            return Picture.create(picToSave)
        }).catch((err)=>{/*Handle promise.all error here*/})
    }).catch((err)=>{/*Handle makePictureAndThumbnail error here*/})
}

但同时,让savePicture()只返回Picture.create()的诺言.then()和.catch()。

我想的是把它包装在一个巨大的新承诺((决心,拒绝)=>{}),但这可能是一个可怕的做法。

关于这方面的投入是非常感谢的。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-18 21:39:06

用一个巨大的新承诺((解决,拒绝)=>{})来包装这一切可能是一种可怕的做法。

是的indeed it is

要处理来自承诺而不是then实现回调的拒绝,可以使用.then(…).catch(…)

代码语言:javascript
复制
savePicture(newPicture, fileData){
    return compressionUtil.makePictureAndThumbnail(newPicture).then((data) => {
        …
        return …
    }, err => {
//   ^ no `catch`
        /* Handle makePictureAndThumbnail error here */
    });
}

类似地,

代码语言:javascript
复制
return Promise.all([writeBig, writeSmall]).then(() => {
    let picToSave = { … }
    return Picture.create(picToSave);
}).catch(err => {
    /* Handle all errors from writeBig, writeSmall and create */
});

代码语言:javascript
复制
return Promise.all([writeBig, writeSmall]).then(() => {
    let picToSave = { … }
    return Picture.create(picToSave).catch(err => {
        /* Handle errors from create */
    });
}, err => {
    /* Handle all errors from writeBig and writeSmall */
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42877252

复制
相关文章

相似问题

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