加入 http 结果

Join http results

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

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

他的专栏todo.userId = user.id

完成此任务的最佳方法是什么?

我正在使用 angular 7

我知道很多地方都会问这个问题,但我没有找到符合我需要的问题。

您可以使用 rxJs 方法 forkJoin

forkJoin(
   this.http.get("https://jsonplaceholder.typicode.com/todos"),
   this.http.get("https://jsonplaceholder.typicode.com/users")
)
.subscribe(result => { 
   // make your stuff here.
   console.log(result)
 });

您也可以作为对象传递

forkJoin({
   todos: this.http.get("https://jsonplaceholder.typicode.com/todos"); 
   users: this.http.get("https://jsonplaceholder.typicode.com/users");
})
.subscribe(result => { 
   // make your stuff here.
   const allObjects = {
      result.todos,
      result.users
   }
 });

假设您实际上是在尝试通过用户 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);
});