Я использую библиотеку C # Promises для проекта Unity, и я хочу вызывать блок кода обещания неопределенное время.Каждый раз, когда обещание выполнено, оно должно решить, будет ли оно вызвано снова или нет.Я нашел это JavaScript решение для ES6 в потоке JavaScript ES6 обещание цикла .
// JavaScript: Function calling itself upon resolution
(function loop(i) {
if (i < 10) new Promise((resolve, reject) => {
setTimeout( () => {
console.log(i);
resolve();
}, Math.random() * 1000);
}).then(loop.bind(null, i+1));
})(0);
Не могли бы вы помочь мне перенести эту идею в C #?
В настоящее время я формирую длинную последовательность обещаний, используя Then()
в цикле for
, и отклоняюсь, когда хочу выйти.Но это слабое решение.Вместо этого я хочу рассмотреть следующую итерацию только тогда, когда текущее обещание будет выполнено.
// C#: Forming the sequence before execution
var p = Promise.Resolved();
for (var i = 0; i < 100; i++)
{
p = p.Then(outcome =>
{
if (shouldContinue)
{
// return a new Promise
}
else
{
// return Promise.Reject()
}
});
}
Редактировать:
Пожалуйста, посмотрите мой ответ ниже для PromiseLooper
класс.