У меня есть функция с аргументом, который я хочу выполнить многократно, в порядке, пока проверка кода состояния не будет правильной.Функция повтора до окончания?
function check(id){
var status = 2;
var exit = 0;
// set status based on web request with ID param
switch(status){
// based on status code, output a message and set exit 0/1
}
/** Here I want the Function to repeat itself with a delay without skipping until exit is 1 **/
}
Я пробовал использовать библиотеку async.whilst, но я не мог понять, как сохранить идентификатор параметра и использовать функцию обратного вызова.
Я также пробовал метод setTimeout, но он затопил консоль и разбился.
Заранее благодарим за любую помощь, которую вы можете мне дать.
Редактировать
Вот полный код, это довольно гетто, но я новичок в этом событии на основе материала
function checkStatusLoop(tradeID){ //checks if the trade is on-going or not (0 - done, 1 - ongoing)
var status = -1; // set default to active
var exit = 0;
manager.getOffer(tradeID, function(err, offer) {
if(err) throw err;
status = offer.state;
});
switch(status){
case 1:
console.log('Trade #' + tradeID + ' Invalid');
exit = 1;
break;
case 2:
console.log('Trade #' + tradeID + ' Active');
exit = 0;
break;
case 3:
console.log('Trade #' + tradeID + ' Accepted!');
exit = 1;
break;
case 4:
console.log('Trade #' + tradeID + ' Countered');
exit = 1;
break;
case 5:
console.log('Trade #' + tradeID + ' Expired');
exit = 1;
break;
case 6:
console.log('Trade #' + tradeID + ' Canceled');
exit = 1;
break;
case 7:
console.log('Trade #' + tradeID + ' Declined');
exit = 1;
break;
case 8:
console.log('Trade #' + tradeID + ' InvalidItems');
exit = 1;
break;
case 9:
console.log('Trade #' + tradeID + ' EmailPending');
exit = 0;
break;
case 10:
console.log('Trade #' + tradeID + ' EmailCanceled');
exit = 0;
break;
default:
console.log('Trade #' + tradeID + ' Bad State!');
exit = 1;
break;
}
if(exit == 0){
setTimeout(function(){
checkStatusLoop(tradeID);
}, 2000);
} else {
return (TradeOfferManager.getStateName(status));
}
}
Эта библиотека из GitHub: https://github.com/DoctorMcKay/node-steam-tradeoffer-manager/wiki/TradeOfferManager#getofferid-callback
возгласы, по-видимому есть on ('sentOfferChanged', позор, который я провел хорошо на этом
Не забывайте, что ваш «веб-запрос», вероятно, асинхронный, что означает, что он не вернет значение, и элемент управления немедленно вернется. Поэтому ваш статус всегда будет неопределенным. – plalx
да, что мне делать? Я просто заметил это тоже, впервые выполнив node.js. Хотя петли не работают – user2837329
Это зависит от того, какой API вы используете для выполнения запроса. Является ли это API на основе обещаний (возвращает обещание)? Если это возможно, вы можете написать свой код: function 'check (id) {makeRequest (id). Then (функция (статус) {/ * остальная часть вашего кода идет здесь/*}); } ' – plalx