【发布时间】:2021-11-10 09:31:37
【问题描述】:
Levels对象是每一层土壤的不同测量值的集合。每一层都有一组键值对(K,N,P),其中值是传感器类型的id。
我需要通过调用以 sensorType id 作为参数的 DrillData 方法为所有四个级别调用每个单元的 api,并等待所有可观察对象完成并存储结果(SensorData 中的总和)以完全相同的格式将传感器类型 ID 替换为总数。我如何达到预期的效果?提前致谢。
export interface SensorData {
period?:string,
total?:number
}
public drillData(params?: {}):Observable<SensorData[]> {
return this._http
.get(this.url + "drill_data/", {
headers: FapAPIRequestOptions.withTokenHeaders,
params,
}).pipe(map((r:Response)=>r["This year"] as SensorData[] ));
}
public levelValues: SoilLevels = {
level30: {},
level15: {},
level10: {},
level5: {},
};
const levels={
level5: {K: 86, N: 84, P: 85, ec: 53, ph: 55, humidity: 38, temperature: 37}
level10: {K: 86, N: 84, P: 85, ec: 53, ph: 55, humidity: 38, temperature: 35}
level15: {K: 86, N: 84, P: 85, ec: 53, ph: 55, humidity: 57, temperature: 37}
level30: {K: 86, N: 84, P: 85, ec: 53, ph: 55, humidity: 93, temperature: 92}
}
for (let level of Object.keys(levels)) {
for (let sensorKey of Object.keys(levels[level])) {
try {
const sensorData = await this.sensorService
.drillData({ ...this.params, sensor: levels[level][sensorKey] })
.toPromise();
let total = 0;
for (let data of sensorData) {
total += data.total;
}
this.levelValues[level][sensorKey] = total;
} catch (error) {
console.log(error);
}
}
}
我在这里使用了 toPromise(),但是它等待上一个请求完成来触发下一个请求。是否有其他方法可以并行调用所有可观察对象,并在它们全部完成后将它们存储在 this.levelValues 中。
这是我从 Api 获得的数据样本
端点:drill_data/?from=2018-09-15T10:56:40.005Z&to=2021-09-15T10:56:40.005Z&agg_by=all&sensor=92
这是来自 api 的响应
"This year":[
{period: "2021-09-14T12:15:14Z", total: 10},
{period: "2021-09-14T12:15:38Z", total: 12}
]
【问题讨论】:
-
调用drillData方法时sensorId是什么
-
sesnorId 是我提供的每个关卡中key的值。
-
这个我没看懂
the result(sum of the total in SensorData) in exact same format replacing the sensor type id with the total. -
我在问题中提供的对象包含传感器 id(86,84,....)。对于每个 id,我将使用钻取数据函数进行 api 调用。该 api 返回一个 SensorData 形状的对象数组。我必须从 SensorData 中获取值并将其放置在与级别对象具有完全相同形状的对象中,但这次我将放置从 api 获得的值而不是 id 跨度>
-
请您分享从关卡到
drillData的示例输入,以及您将从它得到的响应以及您想要对其执行的操作。
标签: javascript angular typescript rxjs observable