[英]Javascript, Ember 2, How to refactor this code of promises (maybe also with async/await)
如何重构下面的代码?
get(category, "posts").then(posts => {
return all(
posts.map(post =>
get(post, "words").then(words => {
return all(
words.map(word => {
if (!get(word, "hasDirtyAttributes")) {
return false;
}
return word
.save()
.then(() => this.ok())
.catch(error => this.error(error));
})
);
})
)
);
});
另外,当我在此代码上具有以下lint规则时,我还想了解如何避免具有许多功能:
[eslint] Use named functions defined on objects to handle promises (ember/named-functions-in-promises)
如何使用异步/等待?
我认为您可能会失去的最复杂的方法是将数组变平。 但是,如果您需要该代码的结果,则将无法使用。 但是我假设您只想保存所有单词。
然后我会做这样的事情:
get(category, "posts").then(posts => {
return all(posts.map(post => get(post, "words")));
})
.then(wordOfWords => wordOfWords.reduce((a, b) => [...a, ...b], []))
.then(words => all(words.map(word => get(word, "hasDirtyAttributes") && word.save()))});
或具有异步功能:
const posts = await get(category, "posts");
const wordOfWords = await all(posts.map(post => get(post, "words")));
const words = wordOfWords.reduce((a, b) => [...a, ...b], []);
const wordsWithDirtyAttrs = words.filter(word => get(word, "hasDirtyAttributes"));
await all(wordsWithDirtyAttrs.map(word => word.save()));
但是,如果您确实需要这种结构,我会将您的代码分成多个功能。 像saveWordsForCategory
, saveWordsForPosts
, saveWords
和saveWord
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.