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