Ego*_*rov 1 javascript asynchronous promise es6-promise
我试图对数据库进行一堆嵌套调用,并希望在结果全部返回后执行某些操作.如果我完全做错了(可能就是这种情况),我是新来的承诺所以请原谅我
我的代码目前是这样的:
getVideos(user).then((videos) => {
videos.forEach((video) => {
getImage(video).then(() => {
getMembers().then((members) => {
getComments().then((comments) => {
getKeywords().then((keywords) => {
getTranscript().then((transcript) => {
console.log(members, comments, keywords, transcript)
}
}
}
}
})
})
})
Run Code Online (Sandbox Code Playgroud)
这显然是超级低效的,因为getMembers()
,getComments()
,getKeywords()
,并且getTranscript()
不需要等待对方,都可以异步调用.也getImage()
可以为循环中的每个视频异步调用,而无需等待.
我正在尝试更改代码以将这些promises捆绑成一个大的,所以一旦它解析,我可以在一个地方访问所有获取的数据.这是我的尝试,但它打印出来
承诺{...},承诺{...},承诺{...},承诺{...}
而不是获取的数据.
知道我做错了什么以及如何将所有这些嵌套的承诺正确地改为一个?谢谢
let members, comments, keywords, transcript
getVideos(user).then((videos) => {
let promises = []
videos.forEach((video) => {
let p = getImage(video).then(() => {
members = getMembers()
comments = getComments()
keywords = getKeywords()
transcript = getTranscript()
return Promise.all([members, comments, keywords, transcript])
})
promises.push(p)
})
return Promise.all(promises)
})
.then(() => {
console.log(members, comments, keywords, transcript)
})
Run Code Online (Sandbox Code Playgroud)
尝试使用2个 Promise.all
!而非-每个video
,以及一个用于members
,comments
,keywords
,和transcript
:
getVideos(user).then((videos) => Promise.all(
videos.map(video => getImage(video)
.then(videoResp => Promise.all([
getMembers(), // do you need to call these functions with `videoResp`?
getComments(),
getKeywords(),
getTranscript(),
]))
)
));
Run Code Online (Sandbox Code Playgroud)
承诺链将以类似的方式解决
[ [
// video 1
v1members,
v1comments,
v1keywords,
v1transcript,
],
[
// video 2
v2members,
v2comments,
v2keywords,
v2transcript,
],
// ...
]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
435 次 |
最近记录: |