Реагировать на результаты запроса GraphQL как объект без JSX?

std::bind2nd из C ++ 98/03 (в частности, pre-lambdas).

bin2nd(f, x) предполагает, что f является функцией (или, по крайней мере, чем-то, что можно вызвать, например функция) и x - это значение, которое передается этой функции в качестве второго параметра. Он создает что-то, что действует как функция. Когда вы вызываете функцию, которую она создает, она эквивалентна вызову f(something, x), поэтому binds x второму параметру его входной функции.

В настоящее время вы, вероятно, скорее всего напишите:

transform(std::begin(numbers), std::end(numbers), 
          remainders, 
          [](int x) { return x % 2; });

Что касается трансформации, это в значительной степени похоже на цикл, поэтому это примерно эквивалентно:

for (int i=0; i<3; i++)
    remainders[i] = numbers[i] % 2;

В целом, я думаю, что исходный код наполовину -baked. Мне кажется, что это, вероятно, было написано, когда все это было довольно новым (или, по крайней мере, новым для автора). Если бы я собирался выполнить эту работу в целом, я бы, вероятно, немного «сбил» операции:

std::transform(std::begin(numbers), std::end(numbers),
            std::ostream_iterator<std::string>(std::cout, "\n"), 
            [](int i) { return std::to_string(i) + (i % 2 == 0 ? " is even" : " is odd"); });

Оригинал, похоже, не используется для массива remainders, кроме чтобы сохранить промежуточное значение перед печатью результата, поэтому, вероятно, лучше вообще не создавать / заполнять его.

0
задан Michael Ross 19 January 2019 в 11:33
поделиться

1 ответ

Сетевые запросы являются асинхронными для предотвращения блокировки пользовательского интерфейса. Fetch API , который Apollo использует под капотом, использует Promises вместо более традиционных обратных вызовов для обработки асинхронных запросов ресурсов по сети, поэтому API-интерфейс Apollo также основан на Promises. Нет доступных методов, которые позволили бы вам синхронно извлекать запрос GraphQL - вам просто нужно правильно структурировать свой код для обработки Promise после его разрешения.

В следующих примерах предполагается, что вы правильно настроили экземпляр клиента. Использование then:

function doSomething () {
  client.query({ query: SOME_QUERY })
    .then(({ data }) => {
      // Use the returned data however you like
    })
    .catch(error => {
      // Handle error
    })
}

Использование async / await:

async function doSomething () {
  try {
    const { data } = await client.query({ query: SOME_QUERY })
  } catch (error) {
    // Handle error
  }
}

Если вы не знакомы с Promises, было бы полезно ознакомиться с соответствующей документацией [ 114] и ознакомьтесь с некоторыми учебниками .

0
ответ дан Daniel Rearden 19 January 2019 в 11:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: