Код:
var promiseResolve, promiseReject;
function iterateRules(rules, params, i = 0) {
CWevents.putRule(rules[i], function(err, data) { // This is an async function with a callback
if (err) console.log(err); promiseReject(err)
responses++
params['Lambda_invoke']['SourceArns'].push(data.RuleArn)
if(responses == rules.length){ promiseResolve("Success"); console.log("Resolved")}
// After two responses are confirmed, this if does run and I get the "Resolved"
})
i++
if(i < rules.length){
setTimeout( function(){
iterateRules(params['CW_rules']['Rules'], params, i)
}, 50)
}
}
new Promise((resolve, reject) => {
resolve()
// This part is added solely for the code to make sense, it's taken out of a
// bigger script and lots of unnecessary data is removed
})
.then((Item) => {
return new Promise((resolve, reject) => {
promiseReject = reject;
promiseResolve = resolve;
iterateRules(params['CW_rules']['Rules'], params)
})
}) .then((res) => {
console.log("This ran")
})
Функция iterateRules
должна запускать асинхронную функцию несколько раз и разрешать Обещание, которое она вызвала при получении последнего ответа. if(responses == rules.length)
работает должным образом и регистрирует «Resolved» в консоли. Все прошло успешно, без ошибок.
Ниже приведен контекст этого кода, функция iterateRules
выполняется, а последующая .then
- нет. Если я вставлю resolve()
в обещание напрямую, оно выполнится. Что может быть не так с этим скриптом? Я попытался запустить простую версию, которая выглядит следующим образом:
var res, rej;
function dude(){
res()
}
new Promise((resolve, reject) => {
res = resolve;
dude()
}).then((dude) => {
console.log("resolved")
})
И это действительно работает, так что я очень запутался. Что может вызвать проблему? Заранее спасибо.