На самом деле это довольно просто, если вы планируете использовать async/await
. Идея в том, чтобы отправить свой JSON Synchronously
.
Не проверял код, но, более или менее, он должен быть таким.
const x = [{...}] // assuming that x is your array of object
const sendByChunks = async (chunkSize) => {
return new Promise((resolve, reject) => {
let start = 0
let end = 0
while (start <= x.length) {
try {
end = (end + chunkSize) > x.length ? x.length : (end + chunkSize) // set the end index
const payload = x.slice(start, end) // slice the array
start = end
await postBatchData(payload) // send to your API
} catch (error) {
reject(`Error postBatchData from ${start} to ${end}`) // log something
}
resolve('Success')
}
})
}
sendByChunks(100)
.then(response => { // handle response (your resolve) })
.catch(error => { // handle error (your reject) })
template<class MyFunctor> MyMethod(MyFunctor f) {
boost::function<void()> g = f;
g();
}
Тип Вы передаете boost::function
функциональный тип. Например, int(bool, char)
тип интервала возврата функции и взятия bool и символа. Тем не менее, если Вы хотите создать shared_ptr сразу же, Вы не должны хранить функтор где-нибудь (boost::function
требует new
оператор для этого, даже при том, что для очень маленьких функторов, это будет использовать специальные приемы, чтобы только использовать выделение стека (маленькая буферная оптимизация)):
template<class MyFunctor> MyMethod(MyFunctor f) {
boost::shared_ptr<T> ptr(new T, f);
}
повышение:: функция является частью tr1
и будет часть следующего официального Стандарта C++. Пример:
struct Manager {
template<typename Deleter>
Manager(Deleter d)
:deleter(d) {
}
boost::shared_ptr<Resource> allocate() {
...
return boost::shared_ptr<Resource>(resource, deleter);
}
private:
boost::function<void(Resource *)> deleter;
};
Существует два пути, оба из который biol вниз к шаблонной обработке класса.
template <MyFunctor>
class MyClass
{
MyFunctor func;
public:
MyClass(MyFunctor f) :func(f)
{ }
MyMethod()
{
func();
}
}
Это потребовало бы, чтобы Вы знали тип функтора. Чтобы избежать, чтобы, мы могли использовать фабрику:
template<MyFunctor>
MyClass<MyFunctor> MakeFunctorClass(MyFunctor f)
{
return MyClass<MyFunctor>(f);
}
Поочередно, с тех пор по всей вероятности, большая часть подписи функтора будет тем же только с изменением небольшой части, мы могли использовать это:
template <MyType>
class MyClass
{
typedef std::binary_function<MyType, MyType, bool> MyFunctor;
MyFunctor func;
public:
MyMethod(MyFunctor f)
{
func = f;
func();
}
}
Это делает использование немного более простым:
bool AreEqual(int, int);
MyClass<int> myc;
myc.MyMethod(AreEqual);
в дорогом из более хитрого определения (т.е. я не гарантирую, что binary_function определение типа дал, будет работать),
Не уверенный, если это помогло бы, но знало бы что повышение:: shared_ptr имеет переопределения конструктора, которые позволяют пользователю включать пользовательское освобождение (и пользовательское средство выделения, при желании). Это могло бы быть достаточно для того, в чем Вы нуждаетесь (это разработано, имея это в виду, если я читаю Ваш пример использования правильно).