异步/等待链接

时间:2018-03-29 15:08:24

标签: javascript node.js async-await chain

猜猜轮到我在stackoverflow创建用户了:)

我已经尝试并解决了这个任务2天了,我可以让它显示前两个信息,但我不知道我如何访问最后两个... 另外,我有一个小小的想法,我完全错了......

这就是我必须做的事情:

  • 使用此链接中的信息查找Luke Skywalker出现的第一部电影
  • 使用此链接中的信息查找本电影中出现的第一个物种
  • 使用此链接中的信息查找该物种的行星(家园)

现在,实现一个方法getPlanetforFirstSpeciesInFirstMovieForPerson(id){}id = 1 (Luke Skywalker)应该记录此信息:

姓名:Luke Skywalker
第一部电影:帝国反击战 第一种:尤达氏种 家园世界:未知

提示:

  1. 这要求您发出许多REST请求(使用fetch),从请求中读取值,并使用此值执行新请求。
  2. 响应中的列表未排序。对于本练习,只需使用列表中的第一个URL:像films[0]实际上会给你第二部电影,见下文:
  3. 数据:

    "films": [
      "https://swapi.co/api/films/2/", 
      "https://swapi.co/api/films/6/", 
      "https://swapi.co/api/films/3/", 
      "https://swapi.co/api/films/1/", 
      "https://swapi.co/api/films/7/"
    ],
    

    这是我到目前为止所做的:

    const fetch = require('node-fetch')
    const URL = "https://swapi.co/api/people/";
    
    async function getPlanetForFirstSpeciesInFirstMovieForPersonID(id) {
    
        const result = await fetch(URL);
    
        const data = await result.json().then((nameData) => nameData.results[id]);
        const name = data.name
    
        const film = await fetch(data.films[id])
    
        const filmdata = await film.json().then((movietitle) => movietitle.title)
    
        console.log(name)
        console.log(filmdata)
    }
    
    getPlanetForFirstSpeciesInFirstMovieForPersonID(0).catch((e) => {
    
        console.log('There was an error :', e)
    });
    

    但我想必须有更清洁,更聪明的方法来做到这一点。 我可以毫无问题地使用旧方式使用promise,但我必须使用async / await。

0 个答案:

没有答案