Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在map函数中调用api并使用结果 vm.owner=parents.children.map(函数(e){ getparentById(e.Id) .then(函数(getresponse){ var html=''; 返回html; }) .最后(函数(){ vm.isLoading=false; }); //var html=''; //返回html; }).加入(“| |”);_Javascript_Angularjs_Typescript - Fatal编程技术网

Javascript 在map函数中调用api并使用结果 vm.owner=parents.children.map(函数(e){ getparentById(e.Id) .then(函数(getresponse){ var html=''; 返回html; }) .最后(函数(){ vm.isLoading=false; }); //var html=''; //返回html; }).加入(“| |”);

Javascript 在map函数中调用api并使用结果 vm.owner=parents.children.map(函数(e){ getparentById(e.Id) .then(函数(getresponse){ var html=''; 返回html; }) .最后(函数(){ vm.isLoading=false; }); //var html=''; //返回html; }).加入(“| |”);,javascript,angularjs,typescript,Javascript,Angularjs,Typescript,在上面的代码中,我尝试通过| |连接html变量,因为它通过子对象循环并通过getparentbyid调用api。如果我将html放在getparentbyid函数之外,我可以用“| |”连接html,但我无法获得getresponse的代码来连接它。当我把它放在getparentbyid api调用函数中时,我无法获得与“| |”匹配的输出。我只得到由“| |”连接的空格。如何解决此问题?您的.map()函数参数需要返回一些内容,但目前没有。在getparentById()调用之前添加retu

在上面的代码中,我尝试通过| |连接html变量,因为它通过子对象循环并通过getparentbyid调用api。如果我将html放在getparentbyid函数之外,我可以用“| |”连接html,但我无法获得getresponse的代码来连接它。当我把它放在getparentbyid api调用函数中时,我无法获得与“| |”匹配的输出。我只得到由“| |”连接的空格。如何解决此问题?

您的
.map()
函数参数需要返回一些内容,但目前没有。在
getparentById()
调用之前添加
return
语句,它将返回它创建的承诺

然后,
map()
调用将返回这些承诺的数组,这些承诺都应该得到解决。为此,可以使用
Promise.all()
,它将返回一个承诺。在此承诺上使用
.then()
,以使用生成的文本数组。这样就可以连接了

vm.owner
只能在此
.then()
回调中分配,因为只有在所有
getParentById()
调用完成后,结果才可用

在构建每个链接之后,您可以设置
vm.isLoading=false
。我想,你想移动那个代码。您可以在最后一个
之后使用
finally()
。然后()

这将看起来像:

vm.owners = parents.children.map(function(e) {
  getparentById(e.Id)
    .then(function(getresponse) {
      var html = '<a href="/#/parent/onboard/' + e.Id + '"  target="_blank">' + e.Number + "-" + e.Name + "-" + getresponse.code + '</a>';
      return html;
    })
    .finally(function() {
      vm.isLoading = false;
    });
  // var html = '<a href="/#/parent/onboard/'+e.Id+'"  target="_blank">' + e.Number + "-" + e.Name + '</a>';
  // return html;
}).join('  ||  ');

这要求您将代码放在一个
异步函数中
或使用函数。

@RandyCasburn我认为这里有一个答案,但我无法理解这些答案来解决它yet@DanO我试过这些答案。到目前为止还不起作用。可能是我试错了第一个解决问题的方法。使用wait,我稍后再试。谢谢:)
Promise.all(parents.children.map(function(e) {
  return getparentById(e.Id)
    .then(function(getresponse) {
      var html = '<a href="/#/parent/onboard/' + e.Id + '"  target="_blank">' + e.Number + "-" + e.Name + "-" + getresponse.code + '</a>';
      return html;
    })
}))
.then(function(result) {
  vm.owners = result.join('  ||  ');
})
.finally(function() {
  vm.isLoading = false;
});
const listOfPromises = Promise.all(parents.children.map(async function(e) {
  const getresponse = await getparentById(e.Id)
  return  '<a href="/#/parent/onboard/' + e.Id + '"  target="_blank">' + e.Number + "-" + e.Name + "-" + getresponse.code + '</a>';
}))
const allResults = await listOfPromises
vm.owners = allResults.join('  ||  ')
vm.isLoading = false