Promise и область видимости переменных
По ходу изучения работы с асинхронными ф-циями, возник вопрос по поводу области видимости переменных, которые присваиваются в теле Promise.
Код:
var name; |
Цитата:
Причём сама переменная name тут вообще не нужна, работай с result |
Цитата:
Вообще много решений на этот случай. rx.js, async/await ф-ции, библиотека co и прочие прелести. |
resolve(rows); name=rows;-> name=rows; resolve(rows);Но пока then не случится - всё равно там нифга не будет. Promise - это не какое-то чудо, это суть те же коллбэки, только хитро завёрнутые. |
Цитата:
А так, тут нет вообще проблемы. Чисто для порядка можно было бы поменять местами присваивание и resolve, как выше сказали, но вообще, Ваш код должен и в этом виде работать, потому что до тех пор, пока не отработает весь код внутри коллбека, then не будет вызван. Это синхронный кусок в одном потоке. Проблема в чем то другом у Вас. |
var name new Promise(function(resolve, reject){ setTimeout(function(){ resolve() name = "foo" }) }) .then(function(){ console.log(name) // foo }) |
Цитата:
|
Понятно. Спасибо за ответы. Значит, буду работать внутри .then. Просто после С, где всё синхронно, возникают вопросы.
Сразу спрошу, а как на счёт глобальных переменных в node.js? Есть ли какие-то недостатки, которых нет в том же С? Читал, что использовать их не рекомендуется, однако почему это так страшно ясного пояснения не нашёл. |
-VenoM-, потому что глобальные переменные может (случайно) попортить абсолютно любая функция абсолютно любого подключённого скрипта.
|
Ещё такой вопрос. Что-то я торможу.
Такая штука. Когда клиент подключается - в консоль сразу выводится подключение. Но событие 'connection не срабатывает'. Срабатывает только при переподключении клиента, или после получения данных. const server=net.createServer(function(sock,req){ console.log('console: ' + sock.remoteAddress +' '+ sock.remotePort); server.on('connection', function(sock) { server.getConnections(function(err, count){ console.log("count", count); }); console.log('OPEN ' + sock.remoteAddress ); }); }); |
Часовой пояс GMT +3, время: 20:47. |