路由文件以等待所有api调用完成"/>
无法获取路由文件以等待所有api调用完成
我尝试了标准的JS计时器,尝试了异步功能,尝试了使用计数器和if语句,但是对我来说没有任何作用;从技术上讲,这里完成了21个api调用,我需要我的程序才能工作。我的呼叫在控制台日志中工作,但它想在将movieData填满之前将数据发送回该页面。现在,它只是将一个空数组推入页面。
我到处都是这个网站,无济于事。
const router = require("express").Router()
const axios = require('axios')
require("dotenv").config()
// const controller = require("../controllers/userController")
function movieSearch(req, res) {
const tmdbApiKey = process.env.tmdbApiKey
let searchQuery = req.params.search
const url = `;q=${searchQuery}`
axios.get(url)
.then(response => {
let recommendations = response.data.Similar.Results
console.log("Recommendations: ", recommendations)
let movieData = []
for (let i = 0; i < recommendations.length; i++) {
const singleUrl = `=${tmdbApiKey}&language=en-US&page=1&query=${recommendations[i].Name}`
axios.get(singleUrl)
.then(singleResponse => {
let single = singleResponse.data.results
for (let x = 0; x < single.length; x++) {
if (single[x].title.toLowerCase() === recommendations[i].Name.toLowerCase()) {
console.log("Single[i]: ", single[x])
movieData.push(single[x])
break
}
}
})
.catch(err => {
console.log(err)
})
}
res.send(movieData) // I still have to find someway to tell it to wait to send the data
})
.catch(err => {
console.log(err)
})
}
function showSearch(req, res) {
let searchQuery = req.params.search
const url = `;q=${searchQuery}`
axios.get(url)
.then(response => {
let recommendations = response.data.Similar.Results
res.send(recommendations)
})
.catch(err => {
console.log(err)
})
}
router.get("/api/movie/:search", movieSearch)
router.get("/api/tv/:search", showSearch)
module.exports = router
回答如下:您需要Promise.all()
。
function movieSearch(req, res) {
//
//
let movieData = []
const promiseArr = []
for (let i = 0; i < recommendations.length; i++) {
const singleUrl = `https://api.themoviedb/3/search/movie?api_key=${tmdbApiKey}&language=en-US&page=1&query=${recommendations[i].Name}`
promiseArr.push(axios.get(singleUrl))
}// for loop
Promise.all(promiseArr).then(result => {});// Array of result of each API request
// Do further operation here
}
Promise.all()
问题,如果任何请求失败,处理将失败,并且没有结果。您可以尝试Promise.allSettled()
更多推荐
无法获取路由文件以等待所有api调用完成
本文发布于:2024-05-07 13:59:27,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
发布评论