синхронизировать ваш sender.methodx
обещанием
method1 : function(options){
const from = options.from;
const to = options.to;
const text = options.text;
//ensure someAsyncFunction is a promise
return someAsyncFunction(function(err,data) {if(err) console.log(err);},from,to,text);
}
или обратным вызовом (добрый путь)
method1 : function(options, cb){
...
return someAsyncFunction(function(err,data) {
if(err){return cb(err)}
return cb(null);
},from,to,text);
}
Я предполагаю, что вы вернетеpromise
задержать ваш объем
func1 : function (arr, oStat){
return arr.reduce((acc, x)=>{
//wait at least 100ms before next sender.method call
return Promise.all([
sender.methodX(x),
new Promise(resolve => setTimeout(resolve, 100))//no need to be a string btw
])
}, Promise.resolve())
}
поймать ошибку вашего метода отправителя для отслеживания счетчика
здесь рассудительный: общая переменная для methodX, чтобы иметь представление передзавершение methodX:
mainFunc : function (dataObjct){
let stats = {data1:{}, data2:{}, data3:{}};
this.func1(dataObjct.arr1, stats.data1);
this.func2(dataObjct.arr2, stats.data2);
this.func3(dataObjct.arr3, stats.data3);
},
func1 : function (arr, oStat){
oStat.count = 0;
return arr.reduce((acc, x)=>{
//wait at least 100ms before next sender.method call
return Promise.all([
sender.methodX(x).catch(e=>{
oStat.count++;
}),
new Promise(resolve => setTimeout(resolve, 100))//no need to be a string btw
])
}, Promise.resolve())
},
синхронизировать ваш mainFunc
Вы не хотите воспроизводить несинхронизируемое состояние someAsyncFunction
, поэтому не запускайте асинхронный материал в пустоте
mainFunc : function (dataObjct){
let stats = {data1:{}, data2:{}, data3:{}};
return Promise.all([
this.func1(dataObjct.arr1, stats.data1),
this.func2(dataObjct.arr2, stats.data2),
this.func3(dataObjct.arr3, stats.data3)
])
},