2017-03-18 4 views
1

を扱う私は、次のシナリオがあります:私はやって探しています何リターンのみ最も内側の約束の漁獲量など

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) 
     }) 
    }) 
} 

をそう

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*/}) 
} 

しかし時のようなcompressionUtil.makePictureAndThumbnail()Promise.all([writeBig, writeSmall])の可能約束拒否を処理しています同じ時刻にsavePicture()Picture.create()の約束.then()と.catch()だけを返します。

私が考えていることは、巨大な新しいプロミス(解決、拒否)=> {}ですべてを包み込むことだと思っていますが、おそらくそれはひどい習慣です。

入力していただければ幸いです。ありがとう。

+0

こんにちは、あなたは試してみてくださいあなたの質問をより多くするためにMWE(http://stackoverflow.com/help/mcve)を提示するあなたの答えを得るチャンスを増やしてください。 – woshilapin

答えて

0

巨大な新しいPromise((resolve、reject)=> {})をすべてラップするのはおそらくひどい習慣です。

はいindeed it is!だけ約束していないthen履行コールバックから拒否を処理するために

、あなたはuse .then(…, …) instead of .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 */ 
});