Javascript 链接节点JS中事件的请求和数据

Javascript 链接节点JS中事件的请求和数据,javascript,node.js,http,promise,Javascript,Node.js,Http,Promise,我试图将两个请求的响应合并为一个JSON 答复。函数应该返回类型为[{response1JSON},{response2JSON}]的数组,每个响应发送需要读取的数据流 function getSongs() { const page1 = 'url1' const page2 = 'url2' let resArray = await Promise.all([ get(page1), get(page2) ])

我试图将两个请求的响应合并为一个JSON 答复。函数应该返回类型为
[{response1JSON},{response2JSON}]
的数组,每个响应发送需要读取的数据流

function getSongs() {
    const page1 = 'url1'
    const page2 = 'url2'

    let resArray = await Promise.all([
         get(page1),
         get(page2)
      ])

     let flattenedResArray = [];

     resArray[0].on('response', (res) => {
       let body = ''
       res.on('data', chunk => {
       body += chunk;
  })

      res.on('end', () => {
         flattenedResArray.push(JSON.stringify(body));
       })
     })

     resArray[1].on('response', (res) => {
       let body = ''
       res.on('data', chunk => {
         body += chunk;
       })

      res.on('end', () => {
         flattenedResArray.push(JSON.stringify(body));
       })
     }) 
   return flattenedResArray;
}
flattedResarray
为空,因为它是异步填充的。我尝试过但失败了的事情

  • 围绕新的
    Promise
    对象包装响应并执行
    then()
  • Promise.all(…).then(…).then(data)
我正在寻找一种正确的方法,使用
Promise.all
合并这些响应


注意:这两个URL都返回一个大的JSON文件,我们需要对其进行流式处理

您确实需要调用一个
承诺。所有的
都基于两个请求的承诺。最好是把最初的承诺连成一个链条,这样就可以同时处理两个请求。因为
res.on
是基于回调的,而不是基于承诺的,所以您必须将其转换为
promise

const reqToPromiseOnEnd = req => new Promise(resolve => {
  req.on('response', (res) => {
    let body = ''
    res.on('data', chunk => {
      body += chunk;
    })
    res.on('end', () => {
      resolve(JSON.stringify(body));
    })
  })
});
function getSongs() {
  const page1 = 'url1';
  const page2 = 'url2';
  return Promise.all([
    get(page1).then(reqToPromiseOnEnd),
    get(page2).then(reqToPromiseOnEnd)
  ]);
}

// example:
getSongs().then(arr => console.log(arr));

您确实需要调用一个
承诺。所有的
都基于两个请求的承诺。最好是把最初的承诺连成一个链条,这样就可以同时处理两个请求。因为
res.on
是基于回调的,而不是基于承诺的,所以您必须将其转换为
promise

const reqToPromiseOnEnd = req => new Promise(resolve => {
  req.on('response', (res) => {
    let body = ''
    res.on('data', chunk => {
      body += chunk;
    })
    res.on('end', () => {
      resolve(JSON.stringify(body));
    })
  })
});
function getSongs() {
  const page1 = 'url1';
  const page2 = 'url2';
  return Promise.all([
    get(page1).then(reqToPromiseOnEnd),
    get(page2).then(reqToPromiseOnEnd)
  ]);
}

// example:
getSongs().then(arr => console.log(arr));
试试这个

function send(page) {
    return new Promise((resolve) => {
        // Stream code
        req.on('response', (res) => {
            let body = ''
            res.on('data', chunk => {
                body += chunk;
            })
            res.on('end', () => {
                resolve(JSON.stringify(body));
            })
        })
    });
}

function getSongs() {
    const page1 = 'url1';
    const page2 = 'url2';
    return Promise.all([
        get(page1),
        get(page2)
    ]);
}
getSongs().then(arr => console.log(arr));
或者您可以使用请求模块进行操作。

试试这个

function send(page) {
    return new Promise((resolve) => {
        // Stream code
        req.on('response', (res) => {
            let body = ''
            res.on('data', chunk => {
                body += chunk;
            })
            res.on('end', () => {
                resolve(JSON.stringify(body));
            })
        })
    });
}

function getSongs() {
    const page1 = 'url1';
    const page2 = 'url2';
    return Promise.all([
        get(page1),
        get(page2)
    ]);
}
getSongs().then(arr => console.log(arr));
或者您可以使用请求模块进行操作。


是否确实要将自己限制在两个硬编码URL?是否确实要将自己限制在两个硬编码URL?