У меня есть следующий код, и хотя в этом примере нет ничего асинхронного, я написал его, чтобы понять поток с использованием генераторов и промисов.
Моя цель - пройтись по массиву и выполнить асинхронный процесс для каждого отдельного элемента в массиве, и я хочу сделать это по порядку. Из того, что я прочитал, я ожидал, что yield operator(rule);
даст значение разрешенного обещания. Вместо значения false
он дает мне обещание, подобное следующему Promise { false }
Я думаю, что я упускаю/не понимаю что-то важное в этом потоке.
Вот код:
'use strict';
let operator = function (rule) {
return new Promise((resolve, reject) => {
resolve(rule.bool);
});
};
let setOfRule = [
{
name: 'one',
bool: false
},
{
name: 'two',
bool: false
},
{
name: 'three',
bool: false
}
];
let myGen = function* (rules) {
for (let rule of rules) {
try {
yield operator(rule);
} catch (e) {
console.log(e);
}
}
};
for (let filtered of myGen(setOfRule)) {
console.log(filtered); // Promise { false }
console.log(`Is it filtered: ${filtered}`); // Is it filtered: [object Object]
if (filtered) {
break;
}
}