desc the pieces by data & optimize the promise