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, время: 09:39. |