Вы можете создать Обещание, которое разрешается после выполнения обоих setState
вызовов:
function handleSomething() {
return new Promise(resolve => {
this.setState(
prevState => {
/*...*/
},
async () => {
let result = await f();
this.setState(
prevState => {
/*...*/
},
() => resolve(result)
// ^^^^^^^ resolve the promise with the final result
);
}
);
});
}
, которые будут использоваться как:
this.handleSomething.then(result => /* ... */)
// or
const result = await this.handleSomething();
Еще на самом языке, но C++ 0x не будет иметь поддержку шаблонов variadic.
C++ 0x variatdic шаблоны является Вашим лучшим выбором, но это также будет некоторое время, прежде чем можно будет использовать их.
Если Вы нуждаетесь в последовательностях типов сегодня, смотрите на вектор MPL типов, а также других типов последовательности типа. Это - часть библиотеки Boost. Это позволяет Вам обеспечивать аргумент шаблона, который является последовательностью типов вместо просто единственного типа.
Как насчет того, чтобы обойти эту проблему с помощью Повышения Связывают? Вы могли заставить свой код принять отдельный аргумент или ни один вообще, и связать аргументы, в которых Вы нуждаетесь на сайте вызова.