首页 > 解决方案 > 加入http结果

问题描述

我需要加入这两个http请求的结果:

this.http.get("https://jsonplaceholder.typicode.com/todos"); this.http.get("https://jsonplaceholder.typicode.com/users");

通过他的专栏todo.userId = user.id

实现这一目标的最佳方法是什么?

我正在使用角度 7

我知道这是一个在很多地方都问过的问题,但我没有找到适合我需要的问题。

标签: javascriptangularhttpangular7

解决方案


假设您实际上是在尝试通过用户 ID 将所有待办事项与其用户连接起来,那么Array.map就可以完成这项工作。

获得两个数据集后,只需使用Array.map循环遍历所有用户并获取他们的待办事项

// This function is just to fake the `this.http.get`
function httpGet(url) {
  return new Promise( async (resolve, reject) => {
    const result = await fetch(url);
    const data = await result.json();
    resolve(data);
  });
}

// Create an array of promises to resolve your endpoints at once

const promises = [
  httpGet('https://jsonplaceholder.typicode.com/todos'),
  httpGet('https://jsonplaceholder.typicode.com/users')
];

// Wait for both promises to finish, then use Array.map to 'join' them
Promise.all(promises).then( results => {
  const todos = results[0];
  const users = results[1];


  // This is the notable part
  const result = users.map( u => {
    u.todos = todos.filter( t => t.userId === u.id );
    return u;
  });
  // End of notable part

  console.log(result);
});


推荐阅读