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