gpt4 book ai didi

javascript - 如何在 Angular 6 的循环中链接 promise

转载 作者:行者123 更新时间:2023-11-30 19:45:58 25 4
gpt4 key购买 nike

我正在尝试使用一个名为 addDevice() 的函数来更新本地存储,它会检查 key 中是否已经有一些数据,然后将其附加到该数据,否则只更新 key 。

export class DeviceService implements devicesInterface {

devices : Array<deviceInterface> = [];

constructor(private storage : Storage, private http : HttpClient) { }

addDevice(ssid : String, name : String){
console.log("add device called "+ssid +name)
return this.getDevices().then((res : devicesInterface) => {
console.log("res");
console.log(res)
if (res) {

this.devices = res.devices;
console.log(res);
this.devices.push({ ssid: ssid, name: name });
return this.storage.set(TOTAL_DEVICES, { devices: this.devices });
}
else {
console.log("not res");
let devices_obj = { devices: [{ ssid: ssid, name: name }] };
return this.storage.set(TOTAL_DEVICES, devices_obj);
}
})
}


getDevices(){
return this.storage.get(TOTAL_DEVICES)
}
}

在该页面上,我正在调用一个解析为 deviceInterface 类型数组的 API。

  this.deviceService.getDevicesFromServer(this.authenticationService.getToken())
.subscribe((res : Array<deviceInterface>) =>{
if(res){
this.storage.remove("TOTAL_DEVICES")
this.devices = []
}

res.map(async device => {
await this.deviceService.addDevice(device.ssid, device.name).then(res=>{
console.log("device added..")
this.devices.push(device)
console.log(res)
})
});
})

addDevice 函数必须在链中调用,以便下次调用它时获取数据并附加它,如果异步调用此函数,则数据将被一次又一次地覆盖。

我搜索了很多但没有找到任何与我的问题匹配的相关解决方案,我如何将迭代链接到 res 对象并在最后一次调用解决后调用 addDevice 函数。

最佳答案

我认为您的 map 函数不会等待每次迭代完成,因此结果会被覆盖。你能试试吗:

for (const device of res) {
await this.deviceService.addDevice(device.ssid, device.name)
.then(res => {
console.log("device added..")
this.devices.push(device)
console.log(res)
})
}

有关详细信息,请参阅 https://stackoverflow.com/a/37576787/4553162

关于javascript - 如何在 Angular 6 的循环中链接 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54939178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com