promise-mysql
Доброго времени суток.
Пробую понять принц работы промисов. Все вроде просто, дождался и пошел дальше, но как быть с циклами ? вот пример
var result = connection.query("SELECT * FROM form_ok WHERE id_form = '"+id_form+"'" );
return result;
}).then(function(rows){
var numbers_form_ok = rows.length;
for (var i = 0; i < numbers_form_ok; i++) {
var k=0;
id_variant = rows[i].id_variant;
// первый запрос с ним все хорошо
var result =connection.query("SELECT * FROM form_variant WHERE id= '"+id_variant+"'");
result.then(function(rows){
// тут второй запрос в этом же цикле стоит мне написать
connection.query("SELECT * FROM....
как сразу ошибка |
набросок
var result = connection.query("SELECT * FROM form_ok WHERE id_form = '"+id_form+"'" )
.then(function(rows){
return rows.reduce(function (p, row) {
return p.then(connection.query.bind(connection, "SELECT * FROM form_variant WHERE id= '" + row.id_variant + "'"))
.then(function(rowsVariant) {
// тут что-то делаем с rowsVariant
}, function () {
// обработка ошибки для запроса из form_variant
});
}, Promise.resolve());
});
|
Для массивов использовать Promise.all.
Никаких циклов с промисами. Промисы - те же коллбэки в симпатичной обёртке. Никакой магии они не делают, и то что делать было нельзя до промисов(например ожидание удалённого ответа в цикое) - нельзя и с промисами. В цикле можно использовать await промиса. Нативный await, который уже отдельная языковая конструкция, и может делать то, что не может чистый промис. |
Цитата:
хотя хрен знает, из обрывков кода ничего не понятно... |
Цитата:
Promise.all - ВЕЩЬ! сейчас попробую собрать отдельно массивы и избавиться от циклов. Если не будет получиться буду пробовать вешать await Прочитал кучу макулатуры и очень многие советуют перестать думать асинхронно. Но как ?? Если в бд одна таблица с ключами по которым надо выбрать из другой, проверить и выбрать из третей ... 5 лет с php - сломайте меня полностью :haha: |
Вообще просто стройте sql запросы по-сложней. Большинство задач решается одним запросом и тогда не надо заморачиваться.)
|
Цитата:
|
Всем Большое спасибо!
Разобрался с промис.олл Но в итоге реально усложнил сам запрос в sql итог две строки вместо кучи ожиданий. Благодарю! |
| Часовой пояс GMT +3, время: 06:11. |