Javascript 我如何才能将项目推向承诺<;数组[]>;?

Javascript 我如何才能将项目推向承诺<;数组[]>;?,javascript,node.js,typescript,Javascript,Node.js,Typescript,类型“Promise”上不存在属性“push” return await relatedArticles.reduce( async (newArticleList: Promise<NewArticle[]>, relatedArticle: FormattedRelatedArticle) => { const article = await this.getArticle() if (article) {

类型“Promise”上不存在属性“push”

    return await relatedArticles.reduce(
      async (newArticleList: Promise<NewArticle[]>, relatedArticle: FormattedRelatedArticle) => {
        const article = await this.getArticle()
        if (article) {
          newArticleList.push({...article, relatedArticle.url})
        }
        return newArticleList
      },
      Promise.resolve([])
    )
return wait relatedArticles.reduce(
异步(newArticleList:Promise,relatedArticle:FormattedRelatedArticle)=>{
const article=wait this.getArticle()
if(物品){
推送({…article,relatedArticle.url})
}
返回新文章列表
},
承诺。解决([])
)

顺便说一句,这样写reduce async是一种好的做法吗?

也许你的前一篇文章是不可变的,试着复制一份

let prevArticleMutable = { ...prevArticle };
prevArticleMutable .push(article)
return prevArticleMutable 
然后推送你的文章,或者你可以改变原型并使用map,y应用相同的过滤器,如下所示:

var targetAticles = relatedArticles.map( async (x) => {

   const article = await this.getArticle()
   if (article) {
      return  article
   }

});
const newArticleList: NewArticle[];
for (const relatedArticle of relatedArticles) {
    const article = await this.getArticle()
    if (article) {
      newArticleList.push({...article, url: relatedArticle.url});
    }
}
return newArticleList;

也许你可以这样做

const[newarticlesults,article]=wait Promise.all([
新文章列表,
this.getArticle()
]);
国际单项体育联合会(第条){
推送({…article,relatedArticle.url})
}
返回newArticleResults

我认为在这里使用
减少
是不明智的。它会降低可读性,并且可以通过以下另一种类型的循环轻松解决:

var targetAticles = relatedArticles.map( async (x) => {

   const article = await this.getArticle()
   if (article) {
      return  article
   }

});
const newArticleList: NewArticle[];
for (const relatedArticle of relatedArticles) {
    const article = await this.getArticle()
    if (article) {
      newArticleList.push({...article, url: relatedArticle.url});
    }
}
return newArticleList;
如果
this.getArticle()
始终返回相同的文章,则可以通过以下方法解决:

const article = await this.getArticle();
const newArticleList: NewArticle[] = !article ? [] : relatedArticles.map((relatedArticle: FormattedRelatedArticle) => ({...article, url: relatedArticle.url}));

为什么
prevaricle
a
Promise
?@Christian-因为reducer函数是
async
,所以总是返回一个Promise。为什么
relatedArticle
参数没有在reducer函数中使用?那么
this.getArticle()调用呢?它将在循环中的每次传递中返回相同的文章否?
relatedArticle
将与
合并,并等待this.getArticle()
。然后推到prevaricle
prevaricle
是一个承诺。它不是一成不变的。它不是一个数组或类似数组的对象。我想创建一个新数组,它有一个新接口,上面有更多属性。map不起作用
map
,如果
article
是falsy,map的回调应该返回一些东西。我只举了一个例子,但@Quentin是对的,它不是数组。