gpt4 book ai didi

javascript - 异步构建一个数组,迭代其他数组

转载 作者:行者123 更新时间:2023-12-03 03:54:12 24 4
gpt4 key购买 nike

我尝试根据所有现有关键字构建关键字列表。我设法检索它们并将它们输出到调试控制台中。

我对如何以及何时调用 resolve(taxonomyKeywords) 感到困惑。我喜欢在所有循环及其内部循环完成时调用它。我尝试使用 foreach,但运行时遇到同样的问题。我的方法是否离题还有更简单的方法?

private searchKeyword(searchTerm: string, results: ITag[]) : ITag[] | Promise<ITag[]>
{
return new Promise<IPersonaProps[]>( (resolve, reject) => {
let taxonomyKeywords : ITag[] = [];

this.props.taxonomyProvider.getTermStores().then( (stores: ITermStore[]) => {
for(var store of stores )
{
this.props.taxonomyProvider.getTermGroups( store.id ).then( (groups: ITermGroup[]) => {

for(var group of groups)
{
this.props.taxonomyProvider.getTermSets(group).then( (sets: ITermSet[]) => {
for(var termSet of sets)
{
this.props.taxonomyProvider.getTerms(termSet).then( (terms: ITerm[]) => {
for(var term of terms)
{
if( term.name.indexOf(searchTerm) >= 0 )
{
taxonomyKeywords.push( { key: term.name, name: term.name} );
}}});}});}});}});});}

最佳答案

我认为下面的模式会更好:

private function searchKeyword(searchTerm: string, results: ITag[]): ITag[] | Promise<ITag[]> {

return this.props.taxonomyProvider
.getTermStores()
.then((stores: ITermStore[]) => {
return Promise.all(stores.map(s => this.props.taxonomyProvider.getTermGroups(s.id)));
})
.then((groups: Array<ITermGroup[]>) => {

const flattenGroups: ITermGroup[] = groups.reduce((p, c) => p.concat(c), []);

return Promise.all(flattenGroups.map(g => this.props.taxonomyProvider.getTermSets(g)));
})
.then((sets: Array<ITermSet[]>) => {
const flattenSets: ITermSet[] = sets.reduce((p, c) => p.concat(c), []);

return Promise.all(flattenSets.map(s => this.props.taxonomyProvider.getTerms(s)));
})
.then((terms: Array<ITerm[]) => {
const flattenTerms: ITerm[] = terms.reduce((p, c) => p.concat(c), []);
return flattenTerms
.filter(t => t.name.indexOf(searchTerm) >= 0)
.map(t => ({ key: t.name, name: t.name }));
});
}

你应该了解promise如何工作

关于javascript - 异步构建一个数组,迭代其他数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45026402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com