我有以下情况:
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])的承诺,就像这样
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()。
我想的是把它包装在一个巨大的新承诺((决心,拒绝)=>{}),但这可能是一个可怕的做法。
关于这方面的投入是非常感谢的。谢谢。
发布于 2017-03-18 21:39:06
用一个巨大的新承诺((解决,拒绝)=>{})来包装这一切可能是一种可怕的做法。
是的indeed it is!
要处理来自承诺而不是then实现回调的拒绝,可以使用.then(…).catch(…)
savePicture(newPicture, fileData){
return compressionUtil.makePictureAndThumbnail(newPicture).then((data) => {
…
return …
}, err => {
// ^ no `catch`
/* Handle makePictureAndThumbnail error here */
});
}类似地,
return Promise.all([writeBig, writeSmall]).then(() => {
let picToSave = { … }
return Picture.create(picToSave);
}).catch(err => {
/* Handle all errors from writeBig, writeSmall and create */
});
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 */
});https://stackoverflow.com/questions/42877252
复制相似问题