Зацикливание массива для выполнения вызовов axios - PullRequest
0 голосов
/ 26 октября 2018

Я звоню через API, чтобы подключить все устройства к моему локальному серверу. Затем я пытаюсь перебрать все подключенные устройства и сделать больше звонков, чтобы получить некоторые данные. Как бы я перебрал все устройства, а не только первое в массиве?

Вот ответ, который я храню в переменной устройств

[{ "подключен": правда, "функции": [ "SetGain", "SetIntegTime", "SetInterrupt", "Включить", "начать"], "идентификатор": "1f0039000547363339343638", "last_app": нулевая "last_heard": "2018-10-26T16: 01: 34.974Z", "last_ip_address": ":: FFFF: 10.10.10.5", "имя": "на самом деле-тюрьма", "platform_id": 6, "product_firmware_version ": 65535," product_id ": 6," статус ":" нормальный», "переменные": { "RAWDATA": "строка", "ColorTemp": "строка", "Люкс": "строка", "SensorArray" : "строка", "Gain": "строка", "IntegraTime": "строка", "TemperatureC": "двойной", "TemperatureF": "двойной", "TemperatureK": "двойной", "TemperatureR":» двойная "}}, {" подключены ": ложная," функция ": нулевой," идентификатор ":" 3a003a001047363333343437" , "last_app": нулевой, "статус": "нормальный", "переменный": нулевая}]

async function getDevices() {
      let devices = await  axios('http://10.10.10.1:8080/v1/devices/?access_token=687b5aee0b82f653c725570422dea5d37de6b65f')
      return this.devices = (devices.data[0].id)};


async function getVariables() {

  try {
    const devices = await getDevices();
    console.log(devices);
    const RawDataPromise = axios(API + devices + '/RawData/?access_token=' + Token);
    const ColorTempPromise = axios(API + devices + '/ColorTemp/?access_token=' + Token);
    const LuxPromise = axios(API + devices + '/Lux/?access_token=' + Token);
    const SensorArrayPromise = axios(API + devices + '/SensorArray/?access_token=' + Token);
    const GainPromise = axios(API + devices + '/Gain/?access_token=' + Token);
    const IntegraTimePromise = axios(API + devices + '/IntegraTime/?access_token=' + Token);
    const TemperatureCPromise = axios(API + devices + '/TemperatureC/?access_token=' + Token);
    const TemperatureFPromise = axios(API + devices + '/TemperatureF/?access_token=' + Token);
    const TemperatureKPromise = axios(API + devices + '/TemperatureK/?access_token=' + Token);
    const TemperatureRPromise = axios(API + devices + '/TemperatureR/?access_token=' + Token);
    const [RawData, ColorTemp, Lux, SensorArray, Gain, IntegraTime, TemperatureC, TemperatureF, TemperatureK, TemperatureR] = await Promise.all([RawDataPromise, ColorTempPromise, LuxPromise, SensorArrayPromise,GainPromise,IntegraTimePromise,TemperatureCPromise,TemperatureFPromise,TemperatureKPromise,TemperatureRPromise]);
    console.log(RawData.data.result, ColorTemp.data.result,Lux.data.result,SensorArray.data.result,Gain.data.result,IntegraTime.data.result,TemperatureC.data.result,TemperatureF.data.result,TemperatureK.data.result,TemperatureR.data.result);
  } catch (e) {
    console.error(e)
  }
}
getVariables();

1 Ответ

0 голосов
/ 26 октября 2018

Создайте функцию-обертку для получения значений с одного устройства, затем вызовите ее несколько раз, используя Promise.all (или Promise.map/each, если используется bluebird);

async function getDevices() {
  let devices = await  axios('http://10.10.10.1:8080/v1/devices/?access_token=687b5aee0b82f653c725570422dea5d37de6b65f');

  return this.devices = (devices.data)
};

async function getForOneDevice(device) {
    // I've assumed here that 'devices' in your API calls was a typo, and was intended to be devices[0] (based on the question)
    const RawDataPromise = axios(API + device + '/RawData/?access_token=' + Token);
    const ColorTempPromise = axios(API + device + '/ColorTemp/?access_token=' + Token);
    const LuxPromise = axios(API + device + '/Lux/?access_token=' + Token);
    const SensorArrayPromise = axios(API + device + '/SensorArray/?access_token=' + Token);
    const GainPromise = axios(API + devices + '/Gain/?access_token=' + Token);
    const IntegraTimePromise = axios(API + device + '/IntegraTime/?access_token=' + Token);
    const TemperatureCPromise = axios(API + device + '/TemperatureC/?access_token=' + Token);
    const TemperatureFPromise = axios(API + device + '/TemperatureF/?access_token=' + Token);
    const TemperatureKPromise = axios(API + device + '/TemperatureK/?access_token=' + Token);
    const TemperatureRPromise = axios(API + device + '/TemperatureR/?access_token=' + Token);
    return Promise.all([RawDataPromise, ColorTempPromise, LuxPromise, SensorArrayPromise,GainPromise,IntegraTimePromise,TemperatureCPromise,TemperatureFPromise,TemperatureKPromise,TemperatureRPromise]);
}

async function getVariables() {
    try {
        const devices = await getDevices();
        console.log(devices);

        const promises = [];
        devices.forEach((device) => {
            promises.push(getForOneDevice(device.id));
        })

        const allResults = Promise.all(promises);
    } catch (e) {
        console.error(e)
    }
}

getVariables();
...