Javascript 响应多个提取请求

Javascript 响应多个提取请求,javascript,reactjs,Javascript,Reactjs,我提出了两个取回请求。我想将数据转换为JSON,然后将其设置为变量 async componentDidMount() { Promise.all([ await fetch('/link1'), await fetch('/link2'), ]).then(links => { const response1 = links[0] const response2 = links[1]

我提出了两个取回请求。我想将数据转换为JSON,然后将其设置为变量

async componentDidMount() {

     Promise.all([
        await fetch('/link1'),
        await fetch('/link2'),
    ]).then(links => {
        const response1 =  links[0]
        const response2 = links[1]  

        const res1 = response1.json()
        const res2 = response2.json()            
    })

    const data1 = res1.data
    const data2 = res2.data

    ...
async componentDidMount() {

 Promise.all([
    await fetch('/link1'),
    await fetch('/link2'),
]).then(links => {
    const response1 =  links[0]
    const response2 = links[1]  

    const res1 = response1.json()
    const res2 = response2.json()
    this.setState({data1: res1.data, data2: res2.data})
})

我无法将
data1
data2
设置为响应。我是新来的,所以我不知道如何格式化它。如何设置
data1
data2

不要同时使用wait和Promise。您可以这样尝试以获得预期的输出

    async componentDidMount() { 
        const link1Fetch = await fetch('/link1');
        const link2Fetch = await fetch('/link2');
        const data1 = await link1Fetch.json();
        const data2 = await link2Fetch.json();
        console.log(data1, data2);
    }


不要用等待和承诺两种方式。您可以这样尝试以获得预期的输出

    async componentDidMount() { 
        const link1Fetch = await fetch('/link1');
        const link2Fetch = await fetch('/link2');
        const data1 = await link1Fetch.json();
        const data2 = await link2Fetch.json();
        console.log(data1, data2);
    }

你可以这么做

let data=[];
Promise.all([fetch(“/link1”)、fetch(/link2”)]))
。然后(回答=>
responses.forEach(res=>res.json()。然后(body=>data.push(body)))
)
.catch(err=>console.error(err));
你可以这样做

let data=[];
Promise.all([fetch(“/link1”)、fetch(/link2”)]))
。然后(回答=>
responses.forEach(res=>res.json()。然后(body=>data.push(body)))
)
.catch(err=>console.error(err));

如果需要访问“渲染”下的这些变量,通常将它们存储在状态变量中

async componentDidMount() {

     Promise.all([
        await fetch('/link1'),
        await fetch('/link2'),
    ]).then(links => {
        const response1 =  links[0]
        const response2 = links[1]  

        const res1 = response1.json()
        const res2 = response2.json()            
    })

    const data1 = res1.data
    const data2 = res2.data

    ...
async componentDidMount() {

 Promise.all([
    await fetch('/link1'),
    await fetch('/link2'),
]).then(links => {
    const response1 =  links[0]
    const response2 = links[1]  

    const res1 = response1.json()
    const res2 = response2.json()
    this.setState({data1: res1.data, data2: res2.data})
})
然后使用您可以使用
data1
data2
作为
this.state.data1/2

要理解为什么你所做的不起作用,你需要阅读更多关于承诺是如何起作用的。()


主要原因是因为JS是异步的,所以data1和data2与
Promise同时分配。所有的
都被激发。

如果需要访问渲染下的那些变量,通常将它们存储在状态变量中

async componentDidMount() {

     Promise.all([
        await fetch('/link1'),
        await fetch('/link2'),
    ]).then(links => {
        const response1 =  links[0]
        const response2 = links[1]  

        const res1 = response1.json()
        const res2 = response2.json()            
    })

    const data1 = res1.data
    const data2 = res2.data

    ...
async componentDidMount() {

 Promise.all([
    await fetch('/link1'),
    await fetch('/link2'),
]).then(links => {
    const response1 =  links[0]
    const response2 = links[1]  

    const res1 = response1.json()
    const res2 = response2.json()
    this.setState({data1: res1.data, data2: res2.data})
})
然后使用您可以使用
data1
data2
作为
this.state.data1/2

要理解为什么你所做的不起作用,你需要阅读更多关于承诺是如何起作用的。()


主要原因是因为JS是异步的,所以data1和data2与
Promise同时被分配。所有的
都被激发。

下面是我如何进行多次抓取的

Promise.all(
[
'https://jsonplaceholder.typicode.com/todos/1',
'https://jsonplaceholder.typicode.com/todos/2'
].map(url=>fetch(url).then(r=>r.json())

).then(results=>console.log(results))
下面是我将如何进行多次抓取

Promise.all(
[
'https://jsonplaceholder.typicode.com/todos/1',
'https://jsonplaceholder.typicode.com/todos/2'
].map(url=>fetch(url).then(r=>r.json())

)。然后(results=>console.log(results))
您超出了范围,这就是为什么它没有按您认为的那样工作。最终目标是什么,这些变量需要从哪里访问?函数,模块,全局?我只是把这些变量传递给一些函数来转换数据。然后它被传递到组件下一层的d3,你不在范围之内,这就是为什么它不能像你认为的那样工作。最终目标是什么,这些变量需要从哪里访问?函数,模块,全局?我只是把这些变量传递给一些函数来转换数据。然后,它被传递到d3组件的下一个部分,您确实需要使用
Promise.all
来并行
获取
请求。此代码一次只执行一次提取。是的,我想我确实需要
Promise.all
,但如何将数据设置为变量?您确实需要使用
Promise.all
来并行
提取
请求。这段代码一次只执行一次获取。是的,我想我确实需要
承诺。所有的
,但我如何将数据设置为变量?这个答案比在异步函数中串联等待所有内容要好。它会让所有的抓取尽快启动。
.json()
也异步吗?
.json()
不应该在承诺之内吗?你说得对。我刚查过这个。更新答案。感谢您的帮助!我接受了你的回答。但是,我如何将
res.send
实现到这一点?您能进一步说明吗?你所说的
res.send
是什么意思?如果您引用的是API响应参数,那么它将出现在您的备份API代码中。但是,上述代码是React项目前端的一部分。我假设是这样的,因为上面是用ReactJS标记发布的。这个答案比在异步函数中串联等待所有内容要好。它会让所有的抓取尽快启动。
.json()
也异步吗?
.json()
不应该在承诺之内吗?你说得对。我刚查过这个。更新答案。感谢您的帮助!我接受了你的回答。但是,我如何将
res.send
实现到这一点?您能进一步说明吗?你所说的
res.send
是什么意思?如果您引用的是API响应参数,那么它将出现在您的备份API代码中。但是,上述代码是React项目前端的一部分。我假设是这样的,因为上面是用reactjs标记发布的