Мне нужно протестировать REDIS (который работает асинхронно), если значение установлено или нет, прежде чем разрешить запуск моего кода.Пока цикл в обещании до тех пор, пока не закончится другое обещание
Я начал работать с Loop Promise, как определено здесь: https://stackoverflow.com/a/17238793/3912805
Я попытался это, но, к сожалению, я застрял с обещанием в ожидании:
promise: { state: 'pending' }
function promiseWhile(condition, body) {
var done = Q.defer();
function loop() {
/** When the result of calling condition is no longer true, we are done */
if(!condition())
return done.resolve();
/** Use 'when', in case `body` does not return a promise */
/** When it completes loop again otherwise, if it fails, reject the done promise */
Q.when(body(), loop, done.reject);
}
/** Start running the loop in the next tick so that this function is completely async */
/** It would be unexpected if body was called synchronously the first time */
Q.nextTick(loop);
return done.promise;
}
var timeline_id = 3;
promiseWhile(function() {
return Q.ninvoke(redisClient, 'hget', 'hashTest', timeline_id).then(function (result) {
console.log(result + '<---->');
return result;
});
}, function() {
return Q.delay(500);
}).then(function() {
// Let's continue process...
});
I нужно проверить интервалы, вызывать, если timeline_id уже выполняется, мне нужно подождать. UNTIL timeline_id был удален в Redis из hashTest.
Как я могу быть уверен, что получил результат, а не обещаю, чтобы проверить, могу ли я еще запустить цикл или нет.