如何处理多个API调用

我目前的代码可以同时获取大约五个 API 调用。


有时一切都会成功,但大多数时候它会返回获取错误。有没有办法可以运行 API 调用而不会出现错误?


app.post("/movie/:movieName/",function(req,res) {

    const Title = req.params.movieName

    Promise.all([

        fetch("https://api.themoviedb.org/3/movie/" + Title + "/videos?=en-us").then(Videos => Videos.json()),

        fetch("https://api.themoviedb.org/3/movie/" + Title + "?&language=en-US").then(Movies => Movies.json()),

        fetch("https://api.themoviedb.org/3/movie/" + Title + "/credits?&language=en-US").then(Cast => Cast.json()),

        fetch("https://api.themoviedb.org/3/movie/now_playing?&language=en-US&page=2").then(Playing => Playing.json()),

        fetch("https://api.themoviedb.org/3/movie/" + Title + "/similar?&language=en-US").then(Similar => Similar.json()),

    ])

      .then(function(response) {

          const Details = response[1]

          const Video = response[0].results[0]

          const Cast = response[2].cast

          const Similar = response[3].results

          const Playing = response[4].results

          res.render(

              "movie",

              { 

                  Details: Details, 

                  Video: Video, 

                  Cast: Cast, 

                  Similar: Similar, 

                  Playing: Playing 

              }

          )

      });

});


饮歌长啸
浏览 101回答 1
1回答

智慧大石

我写这篇文章作为答案只是为了我可以提出一些代码,您可以运行这些代码来测试各种理论,因为我们还不知道实际问题是什么。ETIMEDOUT 并没有真正告诉我们您收到错误的原因。如果这是一个主要站点,则服务器不太可能只是性能不佳并且实际上超时了。它可能会因为您一次向它发送 5 个快速请求而感到不满,但它确实应该给您带来不同类型的错误。也有可能,您和此 api 服务器之间的网络连接存在某种问题。要排除快速请求问题,您可以串行发送请求,在请求之间有短暂的延迟,看看这是否会改变问题。app.post("/movie/:movieName/", async function(req, res) {    try {        const Title = req.params.movieName;        function fetchCommon(suffix) {            return fetch("https://api.themoviedb.org/3/movie/" + suffix).then(r => r.json());        }        function delay(t) {            return new Promise(resolve => {                setTimeout(resolve, t);            });        }        const input = [            Title + "/videos?=en-us",            Title + "?&language=en-US",            Title + "?&language=en-US",            "now_playing?&language=en-US&page=2",            Title + "/similar?&language=en-US"        ];        const results = [];        const waitTime = 250;        for (arg of input) {            let result = await fetchCommon(arg);            results.push(result);            await delay(waitTime);        }        const Details = response[1];        const Video = response[0].results[0];        const Cast = response[2].cast;        const Similar = response[3].results;        const Playing = response[4].results;        res.render(            "movie", {                Details,                Video,                Cast,                Similar,                Playing            }        );    } catch (e) {        // always send a response, even if there's an error        console.log(e);        res.sendStatus(500);    }});注意:这是调试问题的第一步。希望您能从运行此代码中学到一些东西,然后可以归零到问题的实际根本原因。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript