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