あなたは代わりに、ネストの約束を連鎖によって、垂直構造にこれを変換することができます:
this.props.loadNutMatrixes({perPage:'all'})
.then(() => this.props.loadIngredients())
.then(() => this.props.getBadge())
.then(() => this.props.loadNutInfoItems({perPage:'all'}))
.then(() => this.props.getItemSize())
.then(() => this.props.getSingleMenuCategory(this.props.category_uid))
.then(() => this.props.loadAllStores(({per_page:'all'})))
.then(() => {
if (this.props.selectedMenuItem) {
initialize("addNewMenuItem", {
...this.props.selectedMenuItem
})
}
});
可能な改善は、引数なしの関数に引数を受け取るすべての約束-作成機能をラップすることができ、代わりにprops
としてそれらを渡す:
loadAllNutMatrixes() {
return this.loadNutMatrixes({ perPage: 'all' });
}
loadAllNutInfoItems() {
return this.loadNutInfoItems({ perPage: 'all' });
}
getSingleMenuCategoryFromId() {
return this.getSingleMenuCategory(this.category_uid);
}
loadEveryStory() {
return this.loadAllStores({ perPage: 'all' });
}
を次に、あなたは、独自のメソッドに最後のステップをリファクタリングできます
onChainFinished() {
if (this.props.selectedMenuItem) {
initialize("addNewMenuItem", {
...this.props.selectedMenuItem
})
}
}
そしてクリーナーチェーンを達成するためにいくつかの非構造を持つ2つを組み合わせること:あなたのコメントpromise.allのようなものを使用して
に基づいて
const { props } = this;
props.loadAllNutMatrixes()
.then(props.loadIngredients)
.then(props.getBadge)
.then(props.loadAllNutInfoItems)
.then(props.getItemSize)
.then(props.getSingleMenuCategoryFromId)
.then(props.loadEveryStore)
.then(this.onChainFinished);
EDITをが、シリーズで!
プロミスをチェーンするネイティブメソッドはありませんが、これを行うためのユースケースに適したヘルパーメソッドを構築できます。約束はに依存しない場合
const { props } = this;
chainPropsPromises([
props.loadAllNutMatrixes,
props.loadIngredients,
props.getBadge,
props.loadAllNutInfoItems,
props.getItemSize,
props.getSingleMenuCategoryFromId,
props.loadEveryStory
])
.then(this.onChainFinished);
function chainPropsPromises(promises) {
return promises.reduce(
(chain, propsFunc) => (
chain.then(() => propsFunc());
), Promise.resolve()
);
}
彼らはシリーズである必要があります彼らはpromise.allにすることはできませんので、しかし、縦型構造はクールだったが、それだけでインデントリファクタリングのようなものだ、私は構文リファクタリングをしたいです! –
構文リファクタリングとはどういう意味ですか? – nem035
promise.allのようなものを使用していますが、直列的には! –