【问题标题】:Impossible to use Array.toString() after suscribe and push订阅和推送后无法使用 Array.toString()
【发布时间】:2020-04-19 11:08:46
【问题描述】:

这是一段有问题的代码:

const arr1 = new Array;

this.formData.players.split(',').forEach((id) => {
  this.userService.getUser(Number(id)).subscribe((user: User) => {
    arr1.push(user.firstname + ' ' + user.lastname);
  });
});

console.log(arr1);
console.log('Players: ' + arr1.join(', '));

/* - - - - - */

const arr2 = new Array;

arr2.push('orange');
arr2.push('mango');
arr2.push('banana');
arr2.push('sugar');

console.log(arr2);
console.log('Test: ' + arr.join(', '));

第一部分从 Spring 数据库中获取用户的身份。第二个用于测试。

我的日志:

[]
  0: "John Doe"
  1: "Jane Doe"
  length: 2
  __proto__: Array(0)

Players:

(4) ["orange", "mango", "banana", "sugar"]
  0: "orange"
  1: "mango"
  2: "banana"
  3: "sugar"
  length: 4
  __proto__: Array(0)

Test: orange, mango, banana, sugar

我不明白为什么我的第一段代码拒绝显示:

Players: John Doe, Jane Doe

【问题讨论】:

  • 您是在控制台上收到一些错误,还是在该确切行上什么也没有??
  • 这些确切的行,无论是在角度终端还是在 chrome 控制台中都没有错误......

标签: arrays angular string type-conversion


【解决方案1】:

我认为这是因为您的 console.log 函数将在所有订阅完成之前被调用。

You can try to use something like https://www.learnrxjs.io/learn-rxjs/operators/combination/mergeall instead.

from(this.formData.players.split(',')).pipe(
  map(id => this.userService.getUser(Number(id)).pipe(tap(user: User) => {
    arr1.push(user.firstname + ' ' + user.lastname);
  })),
  mergeAll()
).subscribe((data) => {
  console.log(arr1);
  console.log('Players: ' + arr1.join(', '));
});

【讨论】:

  • 谢谢!!!它几乎可以工作。当我用 of(2, 1) 替换 of(this.formData.players.split(',')) 时,它起作用了。似乎 split 命令给了我一个字符串数组,而 of 无法将其理解为一行元素。我希望我能让自己被理解。
  • 成功了!!!!我只需要写 from(this.assisesData.medecins.split(',')) 而不是 'of'。非常感谢,卡特琳娜!
  • 如果您能给我解释一下,我将不胜感激,我努力学习;)
  • @Smarties 是的!您的代码 this.userService.getUser(Number(id)).subscribe 正在异步运行。这意味着您的同步代码(如同一范围内的console.log)将首先执行。因此,您必须确保在所有异步调用之后调用您的 console.log。这就是为什么我把它放在订阅部分。附言如果我的回答对你有帮助,你可以点赞
  • 解决了!谢谢你。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多