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
, кроме чтобы сохранить промежуточное значение перед печатью результата, поэтому, вероятно, лучше вообще не создавать / заполнять его.
Сетевые запросы являются асинхронными для предотвращения блокировки пользовательского интерфейса. 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] и ознакомьтесь с некоторыми учебниками .