Javascript 异步/等待返回未定义的值
我已经找到了一个解决方案,但没有能够实现它Javascript 异步/等待返回未定义的值,javascript,typescript,asynchronous,async-await,undefined,Javascript,Typescript,Asynchronous,Async Await,Undefined,我已经找到了一个解决方案,但没有能够实现它 async processMAC(macs){ let datos = []; for(let x in macs){ await this.ipdataService.getMacsSaData(macs[x]).subscribe(data =>{ datos.push(data) } )} return datos; } this.processMAC(
async processMAC(macs){
let datos = [];
for(let x in macs){
await this.ipdataService.getMacsSaData(macs[x]).subscribe(data =>{
datos.push(data)
}
)}
return datos;
}
this.processMAC(macs).then(result => {//I want to work with result but it is undefined}
如果你在使用承诺
async processMAC(macs){
let datos = [];
for(let x in macs){
datos.push(await this.ipdataService.getMacsSaData(macs[x])
)}
return datos;
}
或者如果您想并行执行getMacsSaData
function processMAC(macs){
return Promise.all(macs.map(mac => this.ipdataService.getMacsSaData(mac)))
}
奇怪的是,虽然示例代码片段中可能有一些错误,但不确定这是否可行:
let macsSaData = await this.ipdataService.getMacsSaData(macs[x]);
macsSaData.subscribe(data => {
datos.push(data)
}
还可以在回调中设置断点,查看是否已将正确的数据推入数组。
等待。订阅(…)
没有意义,订阅方不是承诺。事实上,查找承诺和可观察性之间的差异实际上并不等价。第一个示例将逐个等待this.ipdataService.getMacsSaData(macs[x])
。它是异步的,但如果要测量整个函数,则需要n*x
大量的时间。第二个示例并行处理这些请求,并返回一个承诺,该承诺在它们全部完成时解析。第二个示例也缺少async/await
。见: