我正在开发一个应用程序,该应用程序会从第一个获取请求中返回ID列表。获取ID后,我必须遍历ID并获取每个项目的详细信息,然后将其显示在屏幕上。
fetch(TOP_STORIES)
.then(function(response){
return response.json()
}).then(function(storyIds){
// storyIds is [22,33,44,55,66,77,88,99,123,213,342,45456,778,888]
// is this the best way to fetch all the details of the story
storyIds.forEach(function(storyId){
let storyDetailsURL = `https://someurl/v0/item/${storyId}.json?print=pretty`
fetch(storyDetailsURL)
.then((response) => response.json())
.then((story) => {
displayStory(story)
})
})
})
我的问题是循环获得结果的最佳方法?
更新:Promise.all给我一些问题:
更新:使用异步和等待
async function fetchTopHeadlinesAsyncAwait() {
let response = await fetch(TOP_STORIES)
let storyIds = await response.json()
for(let storyId of storyIds) {
console.log(storyId)
let storyDetailsURL = `someurl/er/tg/${storyId}.json?print=pretty`
let response = await fetch(storyDetailsURL)
let story = await response.json()
displayStory(story)
}
}
答案 0 :(得分:2)
您可以使用Promise.all功能来获取异步操作列表。一切成功后,它们便会完成。
这是Promise all的示例代码,请让我知道它的工作原理:)
[Activity(
Label = "Configuration",
MainLauncher = false,
Theme = "@style/Theme.AppCompat.Light.Dialog_Configuration",
ExcludeFromRecents = true
)]
public class ConfigurationView : AppCompatActivity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
RequestWindowFeature(WindowFeatures.NoTitle);
SetContentView(Resource.Layout.Configuration);
}
}
答案 1 :(得分:0)
如果其中一个故事引发了错误,则此简单的try / catch可使您的异步代码不中断。在这种情况下,我将使用displayStory函数显示错误,但您可以执行任何操作。
column-count